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)

posted @ 2020-07-23 13:34  菜洋  阅读(976)  评论(0编辑  收藏  举报