sql 分组后根据条件去掉整组


GROUP  BY t.Id,ti.`Status`
HAVING  (count(ti.`Status`) != COUNT(IF(ti.`Status` = 16,1,NULL))) 
AND (COUNT(IF(ti.`Status` IN(2,4,8), 1, null)) < 1)

分组后
如果这组内的status都是16 那么这组过滤掉
如果这组内status包含包含 2 4 8 那么这组过滤掉

group by job.Id having count(if(o.Status in (10,20,30,40) ,1, null)) < 1
group by job.Id having count(if(o.Status in (50) ,null, 1)) < 1
主要思路是count(null) having 子句的作用是筛选满足条件的组,即在分组之后过滤数据
count(null)返回0 count(1)返回分组后数量 当组内满足时 为count(1) 与 1 比较 肯定这组都为false 当组内条件不满足时为count(null)


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM