2016-10-17 5 views
1

У меня есть таблица SQL в следующем формате:соотношение SQL между рядами

+------------------------------------+ 
| function_id | event_type | counter | 
+-------------+------------+---------+ 
| 1   | fail  | 1000 | 
| 1   | started | 5000 | 
| 2   | fail  | 800  | 
| 2   | started | 4500 | 
| ...   | ...  | ...  | 
+-------------+------------+---------+ 

Я хочу выполнить запрос по этому поводу, что будет сгруппировать результаты по function_id, давая отношение числа «провал 'событий против числа «запущенных» событий, а также поддержания количества сбоев. То есть Я хочу, чтобы выполнить запрос, который будет давать что-то, что выглядит следующим образом:

+-------------------------------------+ 
| function_id | fail_ratio | failures | 
+-------------+------------+----------+ 
| 1   | 20%  | 1000  | 
| 2   | 17.78%  | 800  | 
| ...   | ...  |   | 
+-------------+------------+----------+ 

Я попробовал несколько подходов, но не увенчались успехом до сих пор. Я использую Apache Drill SQL на данный момент, так как эти данные извлекаются из плоских файлов.

Любая помощь была бы принята с благодарностью! :)

ответ

1

Это все условно агрегация:

select function_id, 
     sum(case when event_type = 'fail' then counter*1.0 end)/sum(case when event_type = 'started' then counter end) as fail_start_ratio, 
     sum(case when event_type = 'fail' then counter end) as failures 
from t 
group by function_id 
+0

Большое спасибо, это работает отлично! Мне просто нужно было сделать быстрое изменение для этого, чтобы набрать числа как float, так как: select function_id, 100.0 * cast (сумма, когда event_type = 'fail', а затем end end) как float)/cast (сумма (случай, когда event_type = 'start', а затем end end) как float) как fail_start_ratio, сумма (случай, когда event_type = 'fail', а затем конец счетчика) в качестве сбоев от t group by function_id – ANikol

+0

Извините, что получил странно отформатированный :( select function_id, 100.0 * cast (сумма, когда event_type = 'fail', а затем end end) как float)/cast (сумма (case when event_type = 'start', а затем end end) как float) как fail_start_ratio, sum (case when event_type = 'fail', а затем end end) в качестве сбоев от t group by function_id – ANikol

+0

'select function_id,' 10 '100.0 * cast (сумма, когда event_type = 'fail', а затем конец концом) как float)/cast (сумма, когда event_type = 'start', а затем end end) как float) как fail_start_ratio, sum (случай, когда event_type = 'fail', а затем end end) в качестве сбоев из t-группы function_id – ANikol

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