Предположим, что у меня есть данные в таблице X:
id assign team
----------------------
1 hunkim A
1 ygg A
2 hun B
2 gw B
2 david B
3 haha A
Я хочу знать, сколько присваивается для каждого идентификатора. Я могу получить использование:
выберите идентификатор, количество (отличный присваиваются) от X групп согласно идентификационному порядку количеством (отличный, присваиваются), desc;
Это даст мне что-то:
1 2
2 3
3 1
Мой вопрос состоит в том, как я могу добраться, среднее число всех присваивают количества?
Кроме того, теперь я хочу знать everage на команду. Таким образом, я хочу получить что-то как:
team assign_avg
-------------------
A 1.5
B 3
Заранее спасибо!
SELECT
AVG(CAST(assign_count AS DECIMAL(10, 4)))
FROM
(SELECT
id,
COUNT(DISTINCT assign) AS assign_count
FROM
X
GROUP BY
id) Assign_Counts
.
SELECT
team,
AVG(CAST(assign_count AS DECIMAL(10, 4)))
FROM
(SELECT
id,
team,
COUNT(DISTINCT assign) AS assign_count
FROM
X
GROUP BY
id,
team) Assign_Counts
GROUP BY
Team
Все, что вы хотите, можно сделать в одном запросе, используя агрегатные функции COUNT и AVG:
SELECT t.id,
COUNT(*) AS num_instances,
AVG(t.id) AS assign_avg
FROM TABLE t
GROUP BY t.id
Столбцы, для которых не выполняется агрегатная функция, должны быть определены в предложении GROUP BY. .