daf*_*ftu 1 postgresql join group-by crosstab
第一查询:
SELECT date_trunc('day', date1) as date, COUNT(*) AS count_a
FROM table_a GROUP BY date
Run Code Online (Sandbox Code Playgroud)
结果:
date count_a
2014-04-01 00:00:00.0 1011642
2014-04-02 00:00:00.0 309048
Run Code Online (Sandbox Code Playgroud)
第二个查询:
SELECT date_trunc('day', date1) as date, COUNT(*) AS count_b
FROM table_b GROUP BY date
Run Code Online (Sandbox Code Playgroud)
结果:
date count_b
2014-04-01 00:00:00.0 2342
2014-04-02 00:00:00.0 43432
Run Code Online (Sandbox Code Playgroud)
我想得到:
date count_a count_b
2014-04-01 00:00:00.0 1011642 2342
2014-04-02 00:00:00.0 309048 43432
Run Code Online (Sandbox Code Playgroud)
这可能吗?
一个简单的UNION ALL应该可以实现。
SELECT date1 date, SUM(a) count_a, SUM(b) count_b
FROM (
SELECT DATE_TRUNC('day', date1) date1, 1 a, 0 b FROM table_a
UNION ALL
SELECT DATE_TRUNC('day', date1) date1, 0 a, 1 b FROM table_b
) z
GROUP BY date;
Run Code Online (Sandbox Code Playgroud)
编辑:这是一个SQLfiddle。
SELECT *
FROM (
SELECT date1::date AS day, COUNT(*) AS count_a
FROM table_a
GROUP BY 1
) a
FULL JOIN (
SELECT date1::date AS day, COUNT(*) AS count_b
FROM table_b
GROUP BY 1
) b USING (day);
Run Code Online (Sandbox Code Playgroud)
USING子句自动折叠到结果中的一列day.date.更快,更简单.SQLfiddle(基于Joachim的).
次要差异:此查询返回NULL一天没有任何行的天数.使用COALESCE(count_b, 0)得到0代替.
| 归档时间: |
|
| 查看次数: |
2081 次 |
| 最近记录: |