2014-11-19 3 views
1
Company_ID Priority 
1    1 
1    10 
1    1 
1    10 
2    1 
3    1 
3    1 
4    1 
8    1 

Я имею таблицу выше (аналог) в моей БД, мне нужно подсчитать частоту появления компании Ids где Priority = 1.Подсчитайте частоту встречаемости

т.е. ожидаемые результаты,

Frequency NoOfCompanies 
1    3 
2    2 

3 компании имеют приоритет 1 запись 3 раза. 2 компании имеют приоритет 1, зарегистрированный 2 раза.

У меня есть запрос, который я пробовал, и не хотел путать со всеми объединениями, которые у меня есть. Вышеприведенная версия упрощена, поэтому ее легко понять.

ответ

1

позволяет сделать некоторые тестовые данные:

DECLARE @MyTable TABLE 
(
    Company_ID int, 
    Priority int 
) 

INSERT INTO @MyTable 
(Company_ID, Priority) 
VALUES 
(1, 1), 
(1, 10), 
(1, 1), 
(1, 10), 
(2, 1), 
(3, 1), 
(3, 1), 
(4, 1), 
(8, 1); 

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

SELECT Company_ID, Priority, COUNT(*) AS Frequency FROM @MyTable 
GROUP BY Company_ID, Priority 

Выход:

Company_ID Priority Frequency 
1 1 2 
2 1 1 
3 1 2 
4 1 1 
8 1 1 
1 10 2 

Теперь давайте посмотрим количество каждой частоты:

SELECT Frequency, COUNT(d.Company_ID) NoOfCompanies FROM 
(
SELECT Company_ID, Priority, COUNT(*) AS Frequency FROM @MyTable 
GROUP BY Company_ID, Priority 
) d 
GROUP BY Frequency 

Выход:

Frequency NoOfCompanies 
1 3 
2 3 
1

Вам нужно будет агрегировать данные дважды:

SELECT Frequency, COUNT(*) NoOfCompanies 
FROM (
    SELECT COUNT(*) Frequency 
    FROM Companies 
    WHERE Priority = 1 
    GROUP BY Company_ID 
) Frequencies 
GROUP BY Frequency 
ORDER BY Frequency 

SQLFiddle here

0

Это должно сделать это в DB2:

С topPriority AS (SELECT company_id из таблицы, где приоритет = 1)

SELECT Company_ID, COUNT (*) FROM topPriority GROUP BY Company_ID

Edit: Кто-то быстрее ...

Смежные вопросы