sql(impala)为每个id在一列中选择不同值的计数

izj3ouym  于 2021-06-26  发布在  Impala
关注(0)|答案(1)|浏览(374)

给出如下表格:

+----+-----------+------------------+
| 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可以有多个诊断年龄,并且每行都是唯一的。
我在试着找出哪个身份证有最明显的诊断。
比如:

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个不同的诊断代码),您将如何进行?
提前谢谢。

soat7uwm

soat7uwm1#

使用 count(distinct) :

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

相关问题