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

Мой вопрос: как я могу получить среднее значение всех назначений?

Кроме того, теперь я хочу знать среднее значение на команду. Итак, я хочу получить что-то вроде:

team    assign_avg
-------------------
A         1.5
B         3

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


person Sung Kim    schedule 11.06.2010    source источник
comment
Можете ли вы объяснить, почему A должно быть 1,5, а B 3? Я действительно не вижу, какие вычисления вы делаете.   -  person Martin Smith    schedule 11.06.2010


Ответы (2)


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

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

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

person OMG Ponies    schedule 11.06.2010
comment
Вы не можете использовать AVG на (*). Там должно быть числовое выражение. - person Tom H; 11.06.2010

person    schedule
comment
Это хорошо работает. Как я могу получить AVG в плавающем режиме? Это дает мне только значения int. - person Sung Kim; 11.06.2010
comment
Вам просто нужно CAST столбец count (вы можете сделать это либо в подзапросе, либо, как я сделал во внешнем запросе выше). - person Tom H; 12.06.2010