SQL(Impala)在一个列中为每个ID选择不同值的计数

问题描述 投票:0回答:1

给出如下表:

+----+-----------+------------------+
| 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 |
+----+-----------+------------------+

每个ID可以出现很多次,每个ID可以有很多诊断,每个ID可以有很多diagnosis_age,并且每一行都是唯一的。

我正在尝试查找哪个ID具有最不同的诊断。

类似:

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            |
+------+-----------------+

但是这并不能真正解决我的问题。如果您将每一行都定义为一种诊断,则此方法有效(我想您可以,因为每一行都是唯一的)。如果相反,您想获得每个id的不同诊断代码的计数(尽管有3行,id 1仍将有2个不同的诊断代码),或者,您希望获得每个id的不同诊断代码的计数(id 4将有2个不同的诊断年龄),您将如何去做?

提前感谢。

sql impala
1个回答
0
投票

使用count(distinct)

SELECT id, COUNT(distinct diagnosis) AS diagnosis_count 
FROM diagnoses
GROUP BY id
ORDER BY diagnosis_count DESC;
© www.soinside.com 2019 - 2024. All rights reserved.