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

0

Я смущен, чтобы задать такой тривиальный вопрос SQL, но я не могу найти и не разработать ответ.

У меня есть столбец идентификаторов, некоторые из которых встречаются более одного раза. Я хотел бы подсчитать количество вхождений каждого идентификатора и соответствующим образом группировать их.

Например:

Идентификаторы: 112 113 114 115 112 112 112

Произвольные группировки: 1, 2-5,> 5

Завершение с возвратом

NUMBER OCCURRENCES 
1      3 
2-5    1
6+     0

Код?

SELECT "1" as NUMBER, 
COUNT(ID) AS OCCURRENCES 
FROM TABLE WHERE OCCURRENCES = 1
UNION
SELECT "2-5" as NUMBER,
COUNT(ID) AS OCCURRENCES
FROM TABLE WHERE OCCURRENCES BETWEEN 2 AND 5
UNION
SELECT "6+" as NUMBER,
COUNT(ID) AS OCCURRENCES
FROM TABLE WHERE OCCURRENCES > 5

Спасибо за любую помощь,

Теги:

2 ответа

2

Я думаю, вы хотите в основном гистограммы гистограмм:

select cnt, count(*), min(id), max(id)
from (select id, count(*) as cnt
      from t
      group by id
     ) t
group by cnt;

Вы можете добавить диапазоны:

select (case when cnt = 1 then '1'
             when cnt <= 5 then '2-5'
             else '6+'
        end) as cnt_range, count(*), min(id), max(id)
from (select id, count(*) as cnt
      from t
      group by id
     ) t
group by cnt_range
order by min(cnt);

Это не даст значения 0. Я не уверен, действительно ли это важно для того, что вам нужно делать.

0

Просто основываясь на вашем описании задачи, вам это нужно.

SELECT [ID], COUNT([ID]) AS OCCURRENCES FROM t GROUP BY [ID], ORDER BY OCCURRENCES DESC

Это приведет к отображению списка всех идентификаторов и счетчиков событий, связанных с идентификатором в порядке убывания. Я пошел этим путем, так как вы упомянули, что диапазоны произвольны.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню