SQL (Импала) выбор количества различных значений в одном столбце для каждого идентификатора - PullRequest
1 голос
/ 18 марта 2020

Имеется таблица, подобная следующей:

+----+-----------+------------------+
| id | diagnosis | diagnosis_age    |
+----+-----------+------------------+
| 1  | 315.32000 | 2.18430371791803 |
| 1  | 315.32000 | 3.18430371791803 |
| 1  | 800.00000 | 2.18430371791803 |
| 2  | 315.32000 | 5.64822705794013 |
| 3  | 800.00000 | 5.68655778752176 |
| 3  | 120.12000 | 5.70572315231258 |
| 4  | 315.32000 | 5.72488851710339 |
| 4  | 315.32000 | 5.74405388189421 |
| 5  | 120.12000 | 5.7604813374292  |
| 6  | 315.32000 | 5.77993740687426 |
+----+-----------+------------------+

Каждый идентификатор может встречаться много раз, у каждого идентификатора может быть много диагнозов, у каждого идентификатора может быть много диагнозов, а каждая строка уникальна.

Я пытаюсь найти, у какого идентификатора самые разные диагнозы.

Что-то вроде:

SELECT id, COUNT(*) AS diagnosis_count 
    FROM diagnoses
        GROUP BY id
    ORDER BY diagnosis_count DESC
LIMIT 5;

Возвращает:

+------+-----------------+
| id   | diagnosis_count |
+------+-----------------+
| 8    | 8557            |
| 99   | 7828            |
| 127  | 7592            |
| 39   | 6812            |
| 2173 | 6492            |
+------+-----------------+

Но это не так действительно решить мою проблему. Это работает, если вы определяете каждую строку как диагноз (что, я полагаю, вы могли бы, так как каждая строка уникальна). Если вместо этого вы хотите получить количество различных кодов диагностики для каждого идентификатора (идентификатор 1 будет иметь 2 различных кода диагностики, несмотря на наличие 3 строк), или, в качестве альтернативы, получить количество отдельных кодов диагностики для каждого идентификатора (идентификатор 4 будет иметь 2 различных диагноза), как бы вы go сделали это?

Заранее спасибо.

1 Ответ

1 голос
/ 18 марта 2020

Использование count(distinct):

SELECT id, COUNT(distinct diagnosis) AS diagnosis_count 
FROM diagnoses
GROUP BY id
ORDER BY diagnosis_count DESC;
...