PostgreSQL:如何结合COUNT与GROUP BY在查询结果中添加同日期购买量列
如何在查询结果中添加当日购买总次数列
你已经能单独统计每日购买量了,但想要把这个统计值直接关联到每一行数据里对吧?这时候用窗口函数就完美解决了,不用做复杂的JOIN,一条语句就能搞定。
首先回顾下你的表结构和数据:
CREATE TABLE fruits ( id INT PRIMARY KEY, fruit_name VARCHAR, purchase_date DATE );
表中现有数据:
| id | fruit_name | purchase_date |
|---|---|---|
| 1 | apple | 2021-02-02 |
| 2 | pear | 2021-02-02 |
| 3 | orange | 2021-02-02 |
| 4 | apple | 2021-02-02 |
| 5 | grapes | 2021-02-04 |
| 6 | grapes | 2021-02-05 |
你需要的完整SQL语句如下,核心是用COUNT() OVER(PARTITION BY purchase_date)来计算每个日期的购买次数,这个窗口函数会为每一行数据添加上其对应purchase_date分组的总记录数:
SELECT *, COUNT(*) OVER(PARTITION BY purchase_date) AS same_day_purchases FROM fruits;
为什么这个方法可行?
PARTITION BY purchase_date会把数据按购买日期分成独立的分组COUNT(*)统计每个分组内的总记录数OVER()子句让这个统计值应用到分组内的每一行,而不是像GROUP BY那样只返回每组一行的压缩结果
执行这条语句后,就能得到你期望的结果:
| id | fruit_name | purchase_date | same_day_purchases |
|---|---|---|---|
| 1 | apple | 2021-02-02 | 4 |
| 2 | pear | 2021-02-02 | 4 |
| 3 | orange | 2021-02-02 | 4 |
| 4 | apple | 2021-02-02 | 4 |
| 5 | grapes | 2021-02-04 | 1 |
| 6 | grapes | 2021-02-05 | 1 |
内容的提问来源于stack exchange,提问作者gb_spectrum
相关产品推荐
相关产品推荐

