#sql #sql-server #apache-drill
#sql #sql-сервер #apache-детализация
Вопрос:
У меня есть таблица 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
Комментарии:
1. Большое спасибо, это отлично сработало! Мне просто нужно было быстро изменить это, чтобы привести подсчеты к значению с плавающей запятой, например: выберите function_id, 100.0 * приведение (сумма (случай, когда event_type = ‘fail’, затем конец счетчика) как float) / приведение (сумма (случай, когда event_type = ‘started’, затем конец счетчика) какfloat) как fail_start_ratio, sum (случай, когда event_type = ‘fail’, затем конец счетчика) как сбои из группы t по function_id
2. Извините, это получилось странно отформатировано: ( выберите function_id, 100.0 * приведение (сумма (случай, когда event_type = ‘fail’, затем конец счетчика) как с плавающей точкой) / приведение (сумма (случай, когда event_type = ‘started’, затем конец счетчика) как с плавающей точкой) как fail_start_ratio, сумма (случай, когда event_type = ‘сбой ‘затем конец счетчика) как сбои из группы t по function_id
3.
select function_id,
` 100.0 * приведение (sum(случай, когда event_type = ‘fail’, затем конец счетчика) как с плавающей точкой) / приведение (sum (случай, когда event_type = ‘started’, затем конец счетчика) как с плавающей точкой) как fail_start_ratio, sum(случай, когда event_type = ‘fail’, затем конец счетчика) как сбои из tгруппировать по function_id