【问题标题】:SQL (Impala) selecting a count of distinct values in one column for each idSQL(Impala)为每个 id 在一列中选择不同值的计数
【发布时间】:2023-03-11 12:38:01
【问题描述】:

给定如下表格:

+----+-----------+------------------+
| 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可以有多个diagnosis,每个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 的不同诊断代码的计数(id 1 将有 2 个不同的诊断代码,尽管有 3 行),或者,获取每个 id 的不同诊断年龄的计数(id 4 将有2 个不同的诊断年龄),你会怎么做?

提前致谢。

【问题讨论】:

    标签: sql impala


    【解决方案1】:

    使用count(distinct):

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

    【讨论】:

    • 哦,亲爱的,非常感谢!没有意识到 distinct 可以像在函数中那样使用。
    • @Gordon Linoff 啊不,抱歉,我以为我之前忘记接受了。
    猜你喜欢
    • 2012-11-08
    • 2012-07-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-03-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多