MySQL Group By:当任何条目与条件不匹配时忽略

时间:2016-02-25 17:29:28

标签: mysql

我想按类型分组,但是当状态为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     |

2 个答案:

答案 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可能存在差异。