2016-09-09 5 views
1

У меня есть база данных, которая выглядит следующим образом:Mysql сортировать по диапазону

NUM/CNT 
3 /1 
5 /0 
100/1 
300/0 
320/1 

И я ищу для запроса, который позволит мне сортировать их по дальности и сделать сумму их подсчета, поэтому я что-то например:

NUM /CNT 
0-100 /2 
100-400/1 

Мне интересно, возможно ли это с помощью запросов mysql.

+0

использование между запросом – JYoThI

ответ

2

Использование SUM с условной агрегации на значении каждого NUM:

SELECT '0-100' AS NUM, 
     SUM(CASE WHEN NUM BETWEEN 0 AND 100 THEN CNT ELSE 0 END) AS CNT 
FROM yourTable 
UNION 
SELECT '100-400' AS NUM, 
     SUM(CASE WHEN NUM BETWEEN 100 AND 400 THEN CNT ELSE 0 END) AS CNT 
FROM yourTable 
+1

ЕСЛИ вы не возражаете ПОЧЕМУ не между SUM (случай, когда NUM между 100 и 400 THEN CNT 0 END ELSE) AS CNT – JYoThI

+0

'SUM (случай, когда NUM <= 400 ТОГДА НКТ ИНАЧЕ 0 END) AS CNT', это добавит значения, которые еще меньше 100, в нем должно быть '>' вещь –

+0

Вы все в порядке. Я реорганизовал мой запрос на univot, и я забыл изменить инструкцию 'CASE'. –

0

попробовать это будет работать так же, как вы хотите.

SELECT '0-100' AS NUM, 
     SUM(CASE WHEN NUM <= 100 THEN CNT ELSE 0 END) AS CNT 
FROM tableName 
UNION 
SELECT '100-400' AS NUM, 
     SUM(CASE WHEN NUM > 100 THEN CNT ELSE 0 END) AS CNT 
FROM tableName 
Смежные вопросы