SQL case 多条件问题

SELECT
    COUNT(id),
    CASE 
    WHEN datetime > '2017-08-22 17:03:00' THEN 1
    WHEN datetime > '2017-08-20 17:03:00' THEN 3
    WHEN datetime > '2017-08-16 17:03:00' THEN 7
    WHEN datetime > '2017-08-30 17:03:00' THEN 30
    ELSE 0 END AS date
FROM
    source
GROUP BY
    date
ORDER BY datetime

case函数只返回第一个符合条件的值,剩下的case部分将会被忽略

但是我希望查询结果包括所有case条件为true的计数,这样的sql怎么写,求问

比如说20号的记录在这段SQL里面遇到第二个case为true后就执行退出了,但我希望在3,7,30这三个case中都执行一遍,也就是说20号的数据在3,7,10这三个结果列中都会进一遍计数

阅读 6.6k
1 个回答

一个case when不可能的,照你这么干岂不是把一条记录变成了好几条记录?无中生有啊你这是!
一条记录判断多次生成多个结果你就需要扫描多次才行,这时候你就需要多次case when,

select 
    case when then else end,
    case when then else end 
 from table;

这样子就可以了


不过这样你后面的group by就不能这么玩了

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进