получение среднего значения по группе sql импала - PullRequest
0 голосов
/ 19 марта 2020

Учитывая таблицу как;

+----+----------+
| id | modality |
+----+----------+
| 1  | CT       |
| 1  | SC       |
| 1  | MR       |
| 1  | CT       |
| 2  | SC       |
| 3  | CT       |
| 3  | CT       |
| 3  | MR       |
| 4  | MR       |
| 4  | CT       |
+----+----------+

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

SELECT AVG(modality_count) 
FROM (
SELECT id, COUNT(modality) AS modality_count
FROM TABLE
GROUP BY id
    ) a

Получит среднее количество модальностей на пациента и выдаст что-то вроде:

+---------------------+
| AVG(modality_count) |
+---------------------+
| 1.4                 |
+---------------------+

следующий запрос:

SELECT CONCAT(CAST(COUNT(*) AS string), ' ' , modality) AS count_m
FROM TABLE
GROUP BY modality

получит счетчик количества строк для каждой модальности, например:

+---+---------+
|   | count_m |
+---+---------+
| 1 | 560 CT  |
| 2 | 2 SC    |
| 3 | 473 MR  |
+---+---------+

Допустим, есть 1035 строк, 726 уникальных идентификаторов и каждый идентификатор, вероятно, будет иметь 1,4 сканирования (либо CT, S C, MR). Как бы вы получили среднее число CT / MT / S C?

желаемый вывод что-то вроде:

+----------+---------+
| modality | AVG(id) |
+----------+---------+
| CT       | 0.77    |
| SC       | 0.003   |
| MR       | 0.65   |
+----------+---------+

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

...