Вычислить результаты одного запроса в процентах от другого в SQL - PullRequest
0 голосов
/ 29 мая 2020

Я пытаюсь подсчитать количество людей с ослабленным зрением по сравнению с количеством людей, прошедших проверку зрения. Мне удалось подсчитать итоги как для количества людей с нарушением зрения (TotalDiagnposed), так и для общего количества оценок (TotalEvaluated):

! impala-shell -q 'SELECT COUNT(*) FROM (SELECT DISTINCT eyesight_evaluation.patient_id FROM eyesight_evaluation WHERE severity_of_sight_loss IN ("Slight","Mild","Moderate","Moderately Severe","Severe","Profound")) AS TotalDiagnosed;'

! impala-shell -q 'SELECT COUNT(DISTINCT eyesight_evaluation.patient_id) AS TotalEvaluated FROM eyesight_evaluation;'

Я не уверен, как вычислить процентное соотношение . Я попытался

! impala-shell -q 'SELECT COUNT(DISTINCT eyesight_evaluation.patient_id) AS TotalEvaluated FROM eyesight_evaluation;'

, но он вернул

ОШИБКА: AnalysisException: синтаксическая ошибка в строке 1: ... osed, TotalEvaluated ROUND (TotalDiagnposed * 100.0 / Tot ... ^ Обнаружено: (Ожидается: CROSS, FROM, FULL, GROUP, HAVING, INNER, JOIN, LEFT, LIMIT, OFFSET, ON, ORDER, RIGHT,> STRAIGHT_JOIN, TABLESAMPLE, UNION, USING, WHERE, COMMA

CAUSED BY: Исключение: синтаксическая ошибка

Кто-нибудь может помочь мне вычислить процентное соотношение? Я использую Impala и блокнот Jupyter.

1 Ответ

0 голосов
/ 29 мая 2020

Можно использовать условное агрегирование:

SELECT (COUNT(DISTINCT CASE WHEN severity_of_sight_loss IN ('Slight', 'Mild', 'Moderate', 'Moderately Severe', 'Severe', 'Profound') THEN ee.patient_id END) * 1.0 /
        COUNT(DISTINCT eyesight_evaluation.patient_id)
       )
FROM eyesight_evaluation ee;
...