sql - 在 postgresql 中将相同日期的值相加
问题描述
下面的查询提供了图像中的结果,但是我想对相同日期的NewOrders和DoneOrders求和。我已经在获取过去 7 天的数据。
SELECT DATE(pickup_date),
COUNT(CASE WHEN order_status ='New' THEN 1 END) AS "NewOrders",
COUNT(CASE WHEN order_status ='Done' THEN 1 END) AS "DoneOrders"
from requests where DATE(pickup_date) > current_date::date - INTERVAL '7 days' GROUP BY pickup_date
ORDER BY pickup_date;
解决方案
您需要修复GROUP BY
. 您的聚合键是带有时间的日期。您想将该值转换为日期:
SELECT pickup_date::date,
COUNT(CASE WHEN order_status ='New' THEN 1 END) AS "NewOrders",
COUNT(CASE WHEN order_status ='Done' THEN 1 END) AS "DoneOrders"
FROM requests
WHERE pickup_date::date > current_date- INTERVAL '7 days'
GROUP BY pickup_date::date
ORDER BY pickup_date::date;
Postgres 也支持FILTER
,这是一种更简洁的逻辑编写方式。另外,current_date
是日期,所以不需要转换,也不需要双引号,所以不要用!
SELECT pickup_date::date,
COUNT(*) FILTER (WHERE order_status = 'New') AS NewOrders,
COUNT(*) FILTER (WHERE order_status = 'Done') AS DoneOrders
FROM requests
WHERE pickup_date::date > current_date - INTERVAL '7 days'
GROUP BY pickup_date::date
ORDER BY pickup_date::date;
推荐阅读
- elasticsearch - 在 Elasticsearch 中解析日志时 FileBeat 有什么用
- java - 错误:- 扫描器类要求输入无限次
- python - Python - 通过应用过滤器从列表中创建新列表
- django-forms - Django 2.1 表单(辅助表单)希望能够使用外键从主字段表中进行选择
- authentication - 如何在 Feathers 中“限制所有者”但允许“管理员”角色
- java - 在 Spring 的当前线程中禁止 @Transactional
- api - Docker 和 Kubernetes 内 API 的端点路径
- java - 如何获取按键的修改键码 - java
- elasticsearch - 如何在 Elasticsearch 中获取返回结果的最大日期值
- c# - 为什么我通过尝试读取 Excel 单元格的值得到空引用异常?