从具有多个where子句的表中获取不同的值计数

时间:2012-02-15 19:28:38

标签: sql

我的表结构是这个

id   last_mod_dt     nr     is_u     is_rog     is_ror    is_unv
1       x            uuid1   1         1          1         0
2       y            uuid1   1         0          1         1
3       z            uuid2   1         1          1         1

我希望行数为:

  1. is_ror=1 or is_rog =1
  2. is_u=1
  3. is_unv=1
  4. 全部在一个查询中。有可能吗?

    我面临的问题是nr的值可能与上表中的情况相同。

4 个答案:

答案 0 :(得分:1)

案例陈述提供了mondo灵活性......

SELECT
  sum(case
        when is_ror = 1 or is_rog = 1 then 1
        else 0
      end) FirstCount
 ,sum(case
        when is_u = 1 then 1
        else 0
      end) SecondCount
 ,sum(case
        when is_unv = 1 then 1
        else 0
      end) ThirdCount
 from MyTable

答案 1 :(得分:0)

如果“单个查询中的所有内容”都不会取消对子选择的限制,那么听起来很简单;

SELECT 
  (SELECT COUNT(DISTINCT nr) FROM table1 WHERE is_ror=1 OR is_rog=1) cnt_ror_reg,
  (SELECT COUNT(DISTINCT nr) FROM table1 WHERE is_u=1) cnt_u,
  (SELECT COUNT(DISTINCT nr) FROM table1 WHERE is_unv=1) cnt_unv;

答案 2 :(得分:0)

你可以使用union来获得多个结果,例如

从is_ror = 1或is_rog = 1的表中选择count(*) 联盟 从is_u = 1的表中选择count(*) 联盟 从is_unv = 1

的表中选择count(*)

然后结果集将包含三行,每行包含一个计数。

答案 3 :(得分:0)

这样的东西
SELECT
    SUM(IF(is_u > 0 AND is_rog > 0, 1, 0)) AS count_something,
    ... 
from table
group by nr

我认为它会起作用

我当然不确定你想要什么,但我相信你可以使用逻辑来产生你想要的结果。