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-запросе?
Ответы
Ответ 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;