select a,b,
count(CASE WHEN c>5 and d >10 THEN distinct e
WHEN c=5 and d =10 THEN distinct e
WHEN c>5 and d <10 THEN distinct e
END)x
from table_name
group by a,b
请问这样的语法有问题吗?
case when的时候count 的用法
- 写回答
- 好问题 0 提建议
- 追加酬金
- 关注问题
- 邀请回答
-
1条回答 默认 最新
- 互联网叫兽 2018-09-28 07:02关注
语法是有问题的,问题定位在【distinct】,删除【distinct】语法就是正确的了。
我不太知道这段sql是用来干什么的,只能猜测下:
首先:
distinct这个关键字用来过滤掉多余的重复记录只保留一条 ,
我猜测你是想要查询满足条件,同时又想根据e字段来去重,但是没有没有搞清楚distinct的用法先执行
select a,b,count(
CASE
WHEN c>5 and d >10 THEN e
WHEN c=5 and d =10 THEN e
WHEN c>5 and d <10 THEN e
END)x
from test
group by a,b执行结果
a b x
小兰 数学 1
小兰 语文 2
小文 语文 1
张三 语文 1
李四 语文 0sql目的是:查询出满足case when 中 条件的学生信息 (比如:小兰 语文 2 ------表示小兰有2条数据满足条件,李四 语文 0 ----表示一条都不满足)
考虑到你 想对 e字段进行去重处理
如果你想要这样写:
select DISTINCT a,b,e,
count(
CASE
WHEN c>5 and d >10 THEN e
WHEN c=5 and d =10 THEN e
WHEN c>5 and d <10 THEN e
END)x
from test
group by a,b,e这样 的SQL是没有意义的,因为本来就已经已经group by a,b,e了,使用DISTINCT 结果是一样的
如果非要使用distinct
可以
SELECT DISTINCT a,e from (
select a,b,e,count(
CASE
WHEN c>5 and d >10 THEN e
WHEN c=5 and d =10 THEN e
WHEN c>5 and d <10 THEN e
END)x
from test
group by a,b,e
)as tba e
小兰 女
小文 女
张三 男
李四 男ps:不太清楚需求,只能自己猜测一下,语法你那样写是不对的
本回答被题主选为最佳回答 , 对您是否有帮助呢?解决 4无用
悬赏问题
- ¥15 【提问】基于Invest的水源涵养
- ¥20 微信网友居然可以通过vx号找到我绑的手机号
- ¥15 spring后端vue前端
- ¥15 寻一个支付宝扫码远程授权登录的软件助手app
- ¥15 解riccati方程组
- ¥15 display:none;样式在嵌套结构中的已设置了display样式的元素上不起作用?
- ¥15 使用rabbitMQ 消息队列作为url源进行多线程爬取时,总有几个url没有处理的问题。
- ¥15 Ubuntu在安装序列比对软件STAR时出现报错如何解决
- ¥50 树莓派安卓APK系统签名
- ¥65 汇编语言除法溢出问题