SQL, чтобы получить отличную статистику - PullRequest
1 голос
/ 11 июня 2010

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

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

Ответы [ 2 ]

1 голос
/ 11 июня 2010

То, что вы хотите, можно сделать одним запросом, используя агрегатные функции 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 голос
/ 11 июня 2010
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
...