请求协助生成符合需求的SQL查询语句(修正现有查询问题)
修正你的SQL查询问题
嘿,我来帮你搞定这个SQL查询的问题!先看看你原查询里的几个明显问题:
group by mytable是语法错误哦,你应该按Name分组,因为你的需求是按每个Name来统计状态数量- 原查询没有明确标识统计的是哪种状态,结果里的计数列会让人搞不清对应Open还是Cleared
- 用
UNION的话会自动去重,如果你有Name在两个状态下都有数据,可能会丢失信息,更推荐用UNION ALL
下面给你两种符合需求的解决方案,你可以根据自己想要的结果格式来选:
方案1:分开行展示每个状态的统计结果
如果希望每个Name+状态组合单独一行展示,用这个查询:
SELECT Name, COUNT(Status) AS Status_Count, 'Open' AS Status_Type -- 明确标注是哪种状态的统计 FROM mytable WHERE Status = 'Open' GROUP BY Name UNION ALL -- 用UNION ALL避免不必要的去重,提升效率 SELECT Name, COUNT(Status) AS Status_Count, 'Cleared' AS Status_Type FROM mytable WHERE Status = 'Cleared' GROUP BY Name;
方案2:一行展示每个Name的两种状态数量
如果希望每个Name一行,同时展示Open和Cleared的数量(更直观的透视表形式),用条件聚合的方式:
SELECT Name, -- 统计Status为Open的数量,不满足的会返回NULL,COUNT会忽略NULL COUNT(CASE WHEN Status = 'Open' THEN 1 END) AS Open_Count, COUNT(CASE WHEN Status = 'Cleared' THEN 1 END) AS Cleared_Count FROM mytable -- 只筛选需要的状态,提升查询效率 WHERE Status IN ('Open', 'Cleared') GROUP BY Name;
这两个查询都能解决你原查询的问题,返回符合预期的统计结果~
内容的提问来源于stack exchange,提问作者Uday
相关产品推荐
相关产品推荐

