m4t*_*m4t 4 sql postgresql select aggregate-functions
我正在尝试这个查询
SELECT date_trunc('day', commit_at) AS day, count(*)
FROM commits
GROUP BY date_trunc('day', commit_at)
ORDER BY date_trunc('day', commit_at) ASC;
Run Code Online (Sandbox Code Playgroud)
它返回
day | count
---------------------+-------
2015-05-18 00:00:00 | 5
2015-05-19 00:00:00 | 2
2015-05-21 00:00:00 | 2
(3 lignes)
Run Code Online (Sandbox Code Playgroud)
问题是:我如何才能强制将空天数包含在结果中?
day | count
---------------------+-------
2015-05-18 00:00:00 | 5
2015-05-19 00:00:00 | 2
2015-05-20 00:00:00 | 0
2015-05-21 00:00:00 | 2
(3 lignes)
Run Code Online (Sandbox Code Playgroud)
一种方法是使用 nugenerate_series生成最小日期和最大日期之间的所有天数,然后将其连接到聚合查询:
SELECT DATE_TRUNC ('day',
GENERATE_SERIES (MIN(commit_at), MAX(commit_at), '1 day')
AS day,
COALESCE (cnt, 0)
FROM commits
LEFT JOIN (SELECT DATE_TRUNC('day', commit_at) AS cday
FROM commits
GROUP BY DATE_TRUNC('day', commit_at)) agg ON day = cday
ORDER BY 1 ASC
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1551 次 |
| 最近记录: |