在CASE语句中使用COUNT条件分类变量:SQL分组统计问题求助
解决按ID分组标记状态的SQL问题
嘿,你的思路完全在线!但初始代码的CASE WHEN语法写错啦——咱们得把语法捋顺才能正常运行。
问题出在哪?
你写的CASE WHEN COUNT(DISTINCT Yes_or_No)>1 AS 'Maybe'有两个小问题:
- 缺少
THEN关键字:CASE WHEN后面的条件满足时,得用THEN指定返回的值 AS的位置不对:列别名应该放在整个CASE语句的末尾,用END闭合后再命名
正确的SQL写法
下面是适配你需求的代码,替换成你的表名就能直接用:
SELECT ID, CASE WHEN COUNT(DISTINCT Yes_or_No) > 1 THEN 'Maybe' ELSE MAX(Yes_or_No) -- 当ID只有一种状态时,直接返回该状态 END AS Status FROM your_table_name -- 这里换成你的实际表名 GROUP BY ID;
代码说明
GROUP BY ID:按ID分组,确保每个ID只返回一行结果COUNT(DISTINCT Yes_or_No) > 1:判断当前ID是否同时包含Yes和No两种值THEN 'Maybe':满足条件时,标记为MaybeELSE MAX(Yes_or_No):当ID只有一种状态时,用MAX()(或MIN()、ANY_VALUE())取出该状态值,比如ID2只有Yes,就返回Yes
示例数据的运行结果
用你给出的测试数据跑上面的代码,会得到这样的结果:
| ID | Status |
|---|---|
| 1 | Maybe |
| 2 | Yes |
| 3 | Yes |
| 4 | Maybe |
| 5 | Yes |
内容的提问来源于stack exchange,提问作者Analyst Guy
相关产品推荐
相关产品推荐

