2013-05-28 7 views
0

Я хотел бы найти запрос позволяет мне иметь на той же строке результата, 2 значения, полученные с помощью другого пункта:Oracle - Different положение счетчика на той же строке

Например, допустим, что у меня есть это таблица:

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 

Но очевидно, что этот синтаксис не существует (и это не дало бы мне соотношение). Как я могу выполнить этот запрос?

ответ

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); 
+1

А вот sqlfiddle демо http://www.sqlfiddle.com/#!4/7919d/4 –

+0

Спасибо @ A.B.Cade. – Noel

+0

Замечательно! Большое спасибо. – Marc

Смежные вопросы