SQL для получения отличной статистики

Предположим, что у меня есть данные в таблице 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

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

1
задан marc_s 8 January 2011 в 11:08
поделиться

2 ответа

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
1
ответ дан 2 September 2019 в 23:48
поделиться

Все, что вы хотите, можно сделать в одном запросе, используя агрегатные функции COUNT и AVG:

  SELECT t.id,
         COUNT(*) AS num_instances,
         AVG(t.id) AS assign_avg
    FROM TABLE t
GROUP BY t.id

Столбцы, для которых не выполняется агрегатная функция, должны быть определены в предложении GROUP BY. .

1
ответ дан 2 September 2019 в 23:48
поделиться
Другие вопросы по тегам:

Похожие вопросы: