Я смущен, чтобы задать такой тривиальный вопрос 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
Спасибо за любую помощь,
Я думаю, вы хотите в основном гистограммы гистограмм:
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
. Я не уверен, действительно ли это важно для того, что вам нужно делать.
Просто основываясь на вашем описании задачи, вам это нужно.
SELECT [ID], COUNT([ID]) AS OCCURRENCES FROM t GROUP BY [ID], ORDER BY OCCURRENCES DESC
Это приведет к отображению списка всех идентификаторов и счетчиков событий, связанных с идентификатором в порядке убывания. Я пошел этим путем, так как вы упомянули, что диапазоны произвольны.