坑爹的mysql

1.用case when中那些想当然的错误

下面找出status = -2的范围


select hid, status from news_host where update_time > '2013-09-28' group by status;

[img]http://dl2.iteye.com/upload/attachment/0089/7497/260addb8-957b-30ba-bd55-865d64ada415.jpg[/img]

下面的结果绝对不是你想要的

SELECT hid, SUM(CASE status WHEN status=-2 THEN scount ELSE 0 END) AS 'preFailCount' FROM ( SELECT hid, status, COUNT(status) AS scount
FROM news_host
WHERE status !=-10 AND hid > 0 AND update_time >= '2013-09-28 00:00:00' AND update_time < "2013-09-29 00:00:00" GROUP BY hid,status) AS tb_h GROUP BY hid




[img]http://dl2.iteye.com/upload/attachment/0089/7501/ec32b4fa-1467-3786-bce2-3c83245013fd.jpg[/img]

下面才是

SELECT hid, SUM(CASE status WHEN -2 THEN scount ELSE 0 END) AS 'preFailCount' FROM ( SELECT hid, status, COUNT(status) AS scount
FROM news_host
WHERE status !=-10 AND hid > 0 AND update_time >= '2013-09-28 00:00:00' AND update_time < "2013-09-29 00:00:00" GROUP BY hid,status) AS tb_h GROUP BY hid



[img]http://dl2.iteye.com/upload/attachment/0089/7499/7a46495f-cb74-3301-8f27-8c5de37c205c.jpg[/img]


这种也对,以后用这样子的

SELECT hid,SUM(CASE WHEN status = -2 THEN scount ELSE 0 END) AS 'preFailCount'
FROM ( SELECT hid, status, COUNT(status) AS scount
FROM news_host
WHERE status !=-10 AND hid > 0 AND update_time >= '2013-09-28 00:00:00' AND update_time < "2013-09-29 00:00:00" GROUP BY hid,status) AS tb_h GROUP BY hid


还有这个

SELECT hid, SUM(CASE WHEN status BETWEEN -6 AND -1 THEN scount ELSE 0 END) AS 'preFailCount' FROM ( SELECT hid, status, COUNT(status) AS scount
FROM news_host
WHERE status !=-10 AND hid > 0 AND update_time >= '2013-09-28 00:00:00' AND update_time < "2013-09-29 00:00:00" GROUP BY hid,status) AS tb_h GROUP BY hid


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值