Предположим, у меня есть таблица с числовым столбцом (назовем ее «счет»).
Я хотел бы создать таблицу подсчетов, которая показывает, сколько раз результаты появлялись в каждом диапазоне.
Например:
диапазон очков | количество вхождений ------------------------------------- 0-9 | 11 10-19 | 14 20-29 | 3 ... | ...
В этом примере было 11 строк с оценками в диапазоне от 0 до 9, 14 строк с оценками в диапазоне от 10 до 19 и 3 строки с оценками в диапазоне 20-29.
Есть ли простой способ настроить это? Что вы порекомендуете?
sql
sql-server
tsql
Хью
источник
источник
Альтернативный подход предполагает сохранение диапазонов в таблице, а не встраивание их в запрос. В итоге вы получите таблицу, назовите ее Ranges, которая выглядит так:
И запрос, который выглядит так:
Это означает настройку таблицы, но ее будет легко поддерживать при изменении желаемых диапазонов. Никаких изменений кода не требуется!
источник
Здесь я вижу ответы, которые не будут работать в синтаксисе SQL Server. Я хотел бы использовать:
РЕДАКТИРОВАТЬ: см. Комментарии
источник
В postgres (где
||
находится оператор конкатенации строк):дает:
источник
На мой взгляд, ответ Джеймса Керрана был самым кратким, но результат был неверным. Для SQL Server самое простое утверждение выглядит следующим образом:
Предполагается, что временная таблица #Scores, которую я использовал для ее тестирования, просто заполнила 100 строк случайным числом от 0 до 99.
источник
источник
источник
Это позволит вам не указывать диапазоны и должно быть независимым от SQL-сервера. Математика FTW!
источник
Я бы сделал это немного по-другому, чтобы он масштабировался без определения каждого случая:
Не проверено, но вы поняли ...
источник
источник
Убедитесь, что вы используете слово, отличное от 'range', если вы находитесь в MySQL, иначе вы получите ошибку при запуске приведенного выше примера.
источник
Поскольку столбец, сортируемый по (
Range
), является строкой, вместо числовой сортировки используется сортировка строк / слов.До тех пор, пока строки имеют нули для заполнения числовых длин, сортировка должна быть семантически правильной:
Если диапазон смешанный, просто добавьте дополнительный ноль:
источник
Пытаться
источник
Возможно, вы спрашиваете о том, чтобы такие вещи продолжались ...
Конечно, вы будете вызывать полное сканирование таблицы для запросов, и если таблица, содержащая оценки, которые необходимо подсчитать (агрегации), велика, вам может потребоваться более эффективное решение, вы можете создать дополнительную таблицу и использовать правила, такие как
on insert
- вы можете посмотреть на это.Однако не все движки СУБД имеют правила!
источник