如何在SQL子查询中实现按人员与日期分组统计ticketNum数量
原有写法问题说明
你现有写法的错误点主要有两个:
- 子查询中
WHERE name = name是恒成立的条件,没有实现按外层用户名过滤的逻辑,返回的永远是全表去重后的ticketNum总数 - 缺少日期维度的处理和分组逻辑,无法实现按人员+日期双维度统计的需求
正确实现方案
你可以直接用GROUP BY配合日期转换函数实现需求,不同数据库的日期转换语法略有差异,以下是通用参考写法:
SELECT name AS `Name`, COUNT(ticketNum) AS `Sum of TicketNum`, DATE(created) AS `Date` FROM mytable GROUP BY name, DATE(created)
如果你的业务需要统计同一日内同一人员的不重复工单号数量,将COUNT(ticketNum)替换为COUNT(DISTINCT ticketNum)即可。
不同数据库的日期转换适配说明:
- MySQL/PostgreSQL:直接使用
DATE(created)即可 - SQL Server:替换为
CAST(created AS DATE) - Oracle:替换为
TRUNC(created)
内容的提问来源于stack exchange,提问作者redditor
相关产品推荐
相关产品推荐

