SQL (Impala) 为每个 id 在一列中选择不同值的计数
SQL (Impala) selecting a count of distinct values in one column for each id
给出如下 table:
+----+-----------+------------------+
| 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;
Returns:
+------+-----------------+
| id | diagnosis_count |
+------+-----------------+
| 8 | 8557 |
| 99 | 7828 |
| 127 | 7592 |
| 39 | 6812 |
| 2173 | 6492 |
+------+-----------------+
但这并不能真正解决我的问题。如果您将每一行定义为诊断(我想您可以,因为每一行都是唯一的),这将起作用。相反,如果您想为每个 id 计算不同的诊断代码(id 1 将有 2 个不同的诊断代码,尽管有 3 行),或者,为每个 id 计算不同的 diagnosis_ages (id 4 会有 2 个不同的 diagnosis_age),你会怎么做?
提前致谢。
使用count(distinct)
:
SELECT id, COUNT(distinct diagnosis) AS diagnosis_count
FROM diagnoses
GROUP BY id
ORDER BY diagnosis_count DESC;
给出如下 table:
+----+-----------+------------------+
| 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;
Returns:
+------+-----------------+
| id | diagnosis_count |
+------+-----------------+
| 8 | 8557 |
| 99 | 7828 |
| 127 | 7592 |
| 39 | 6812 |
| 2173 | 6492 |
+------+-----------------+
但这并不能真正解决我的问题。如果您将每一行定义为诊断(我想您可以,因为每一行都是唯一的),这将起作用。相反,如果您想为每个 id 计算不同的诊断代码(id 1 将有 2 个不同的诊断代码,尽管有 3 行),或者,为每个 id 计算不同的 diagnosis_ages (id 4 会有 2 个不同的 diagnosis_age),你会怎么做?
提前致谢。
使用count(distinct)
:
SELECT id, COUNT(distinct diagnosis) AS diagnosis_count
FROM diagnoses
GROUP BY id
ORDER BY diagnosis_count DESC;