Oracle - 同一行上的不同count子句

时间:2013-05-28 09:37:27

标签: sql oracle count

我希望我能找到一个允许我拥有相同结果行的请求,使用不同的子句获得2个值:

例如,假设我有这张表:

ID   |VAL
----------
0    |    1
1    |    0
2    |    0
3    |    1
4    |    0
5    |    0

我希望我可以在同一个请求中选择val = 1的行数,总行数,(如果可能的话,另一个计数的总百分比)将给出这样的结果集:

nb_lines | nb_val_1 | ratio
---------------------------
6        |     2    |   0.5

我尝试过类似的事情:

select count(t1.ID), (select count t2.ID
                     from table t2 where t2.val = 1
                     )
FROM table t1

但显然,这种语法不存在(并且它不会给我这个比例)。我怎么能执行这个请求?

1 个答案:

答案 0 :(得分:2)

尝试使用CASE的查询仅计算我们需要的那些行。

SELECT nb_lines,nb_val_1,nb_val_0, nb_val_1/nb_val_0 FROM
 (SELECT COUNT (t1.ID) nb_lines, 
        COUNT (CASE
                WHEN t1.val = 1
                  THEN 1
                ELSE NULL
               END) nb_val_1, 
        COUNT (CASE
                WHEN t1.val = 0
                  THEN 1
                ELSE NULL
               END) nb_val_0
   FROM tabless t1);