SQL-запрос, который группирует различные элементы в сегменты - PullRequest
28 голосов
/ 12 июля 2011

Я пытаюсь написать запрос, который возвращает количество элементов, цена которых попадает в определенные сегменты:

Например, если моя таблица:

item_name | price
i1        | 2
i2        | 12
i3        | 4
i4        | 16
i5        | 6

, вывод:

range   | number of item
0 - 10  |  3
10 - 20 |  2

Пока я делаю это так:

SELECT count(*)
FROM my_table
Where price >=0
and price <10

затем

SELECT count(*)
FROM my_table
Where price >=10
and price <20

, а затем каждый раз копирую мои результаты в Excel.

Есть ли автоматический способ сделать это в запросе SQL?

Ответы [ 3 ]

40 голосов
/ 12 июля 2011

Расширенная опция из описанного Kerrek, вы можете сделать группировку на основе случая / когда

select
      case when price >= 0 and price <= 10    then '  0 - 10'
           when price > 10 and price <= 50   then ' 10+ - 50'
           when price > 50 and price <= 100  then ' 50+ - 100'
           else 'over 100'
      end PriceRange,
      count(*) as TotalWithinRange
   from
      YourTable
   group by 1

Здесь "группа по 1" представляет порядковый столбец в вашем операторе выбора ... в этом случае, в случае / когда в качестве TotalWithinRange.

17 голосов
/ 12 июля 2011

Вы можете попробовать группировать по 10 единицам цены:

SELECT COUNT(*) AS tally,
       FLOOR(price/10) AS prange,
       CONCAT(10*FLOOR(price/10), "-", 10*FLOOR(price/10)+9) AS rstr
FROM my_table
GROUP BY prange;
0 голосов
/ 13 июля 2011

Немного модификации кода DRapp ...

select
case when price >= 0 and price < 10    then "  0 - 10"
           when price > 10 and price <= 50   then " 10+ - 50"
           when price > 50 and price <= 100  then " 50+ - 100"
           else "over 100"
end As PriceRange,
count(item_name) as ItemTotal
from YourTable
group by 
case when price >= 0 and price < 10    then "  0 - 10"
           when price > 10 and price <= 50   then " 10+ - 50"
           when price > 50 and price <= 100  then " 50+ - 100"
           else "over 100"
end;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...