SQL按日期分组查询返回结果与预期不符问题排查
问题分析与解决
原查询问题
你当前的SQL查询存在逻辑错误:
SELECT DATE, Feeling, COUNT(Feeling) From Table GROUP BY DATE
- 当
GROUP BY DATE时,仅按日期分组,但SELECT列表中包含了Feeling字段。这会导致数据库返回每个日期下任意一条的Feeling值,而非按情绪细分统计;同时COUNT(Feeling)统计的是该日期下的总记录数,和你需要的「每个日期下不同情绪的独立计数」不符。
解决方案1:按日期+情绪分组(基础统计结构)
如果要得到每个日期下各情绪的独立计数,需要同时按DATE和Feeling分组:
SELECT DATE, Feeling, COUNT(Feeling) AS FeelingCount From Table GROUP BY DATE, Feeling ORDER BY DATE
该查询会返回每个日期与情绪的组合,以及对应的记录数,修正原查询的逻辑问题。
解决方案2:条件聚合(匹配透视表式预期输出)
如果要像你预期的那样,把不同情绪作为列展示(一行对应一个日期,各情绪列显示对应计数),需要使用条件聚合:
SELECT DATE, COUNT(CASE WHEN Feeling = 'Happy' THEN 1 END) AS Happy, COUNT(CASE WHEN Feeling = 'Sad' THEN 1 END) AS Sad, COUNT(CASE WHEN Feeling = 'Calm' THEN 1 END) AS Calm From Table GROUP BY DATE ORDER BY DATE
这种写法会将每个日期下的不同情绪计数拆分为单独列,完全匹配你给出的预期输出格式。
内容的提问来源于stack exchange,提问作者John Lee
相关产品推荐
相关产品推荐

