我想按类型分组,但是当状态为1的任何条目时应该忽略。
我尝试用IF
来做,但失败了。
经过大量的搜索,我没有找到类似的东西,所以我决定请你帮忙。
表示例:
| id - status - type |
| 1 - 0 - 1 |
| 2 - 2 - 1 |
| 3 - 1 - 1 | - Should ignore all group - status 1.
| 4 - 3 - 2 |
| 5 - 0 - 2 |
| 6 - 3 - 2 |
| 7 - 2 - 3 |
| 8 - 0 - 3 |
| 9 - 3 - 3 |
| 9 - 2 - 3 |
| 10 - 1 - 4 | - Should ignore all group - status 1.
| 11 - 2 - 4 |
| 12 - 0 - 4 |
| 13 - 1 - 4 | - Should ignore all group - status 1.
代码:
SELECT type, count(*) FROM table GROUP BY type;
我得到了什么:
| type - count(*) |
| 1 - 3 |
| 2 - 3 |
| 3 - 4 |
| 4 - 4 |
我想要的: (类型1和4应该被忽略,因为条目状态为1)
| type - count(*) |
| 2 - 3 |
| 3 - 4 |
答案 0 :(得分:1)
SELECT a.*
FROM
( SELECT x.type
, COUNT(*) total
FROM my_table x
GROUP
BY type
) a
LEFT
JOIN my_table b
ON b.type = a.type
AND b.status = 1
WHERE b.id IS NULL;
答案 1 :(得分:0)
如果status为1或0,则应该为GROUP BY添加HAVING子句就足够了: -
HAVING MAX(status)=0
如果您有更多值,我建议使用两个内联查询: -
SELECT t1.type,t1.count
from
(
select type, count(*) as count
FROM Example
GROUP BY type
) t1
left outer join
(
SELECT type
FROM Example
where Status=1
GROUP BY type
) t2
on t1.type=t2.type
where t2.type is null;
给出结果
2 | 3
3 | 4
正如所料。
在第二个内联查询中使用'SELECT DISTINCT'而不是GROUP BY可能存在差异。