Группировка по интервалам - PullRequest
10 голосов
/ 13 октября 2008

Учитывая таблицу (mytable), содержащую числовое поле (mynum), как можно было бы написать SQL-запрос, который суммирует данные таблицы на основе диапазонов значений в этом поле, а не каждого отдельного значения?

Для более конкретного примера, давайте сделаем интервалы в 3 и просто "суммируем" счетчик (*), так что результаты сообщают количество строк, где mynum равно 0-2.99, количество строк где 3-5.99, где 6-8.99 и т. д.

Ответы [ 2 ]

15 голосов
/ 13 октября 2008

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

select count(*), round(mynum/3.0) foo from mytable group by foo;
3 голосов
/ 13 октября 2008

Я не знаю, применимо ли это к mySql, в любом случае, в SQL Server я думаю, что вы можете просто использовать group by как в списке выбора, так и в списке group by.

Что-то вроде:

select 
    CASE 
        WHEN id <= 20 THEN 'lessthan20' 
        WHEN id >  20 and id <= 30 THEN '20and30' ELSE 'morethan30' END,
    count(*) 
from Profiles 
where 1=1 
group by 
    CASE 
        WHEN id <= 20 THEN 'lessthan20' 
        WHEN id >  20 and id <= 30 THEN '20and30' ELSE 'morethan30' END

возвращает что-то вроде

 column1     column2    
 ----------  ---------- 
 20and30     3          
 lessthan20  3          
 morethan30  13         
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...