Подтвердить что ты не робот

Sql-запрос, который группирует различные элементы в ведра

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

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

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-запросе?

4b9b3361

Ответ 1

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

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

Здесь "group by 1" представляет порядковый столбец в вашем select statement... в этом случае case/when в качестве TotalWithinRange.

Ответ 2

Вы можете попробовать группировать на 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;

Ответ 3

Небольшая модификация кода 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;