Скажите, что у меня есть таблица свойств недвижимости:
A 15,000
B 50,000
C 100,000
D 25,000
Я хотел бы сгруппировать их 0 - 49,999, 50 000 - 99 999 и 100 000 - 200 000
Таким образом, результат должен быть:
0 - 49k (2)
50k - 99k (1)
100k - 200k (1)
Существует ли способ сделать это в одном SQL-операторе? Я использую Пост-ГРЭС между прочим.
Вы можете GROUP BY
выражение, что-то вроде:
SELECT price/50000*50000 AS minPrice,
(price/50000+1)*50000-1 AS maxPrice,
COUNT(*)
FROM table
GROUP BY price/50000;
Зависит от того, примете ли вы подвыборку в этом утверждении и все равно назовете его одним утверждением. Если предположить, что вы хотите, чтобы ваши диапазоны были расширены, то субвыборка с оператором регистра для установки диапазона, тогда будет работать внешняя группировка выбора по диапазонам. Если бы все ваши диапазоны были одинакового размера, было бы проще просто разделить на размер диапазона и сгруппировать по нему.
select t.range, count(*) as num
from
(select case
when price < 50000 then '0 - 49K'
when price >= 50000 and price < 100000 then '50 - 99K'
when price >= 100000 and price < 200000 then '100 - 199K'
...
end
as range,
price
from table) as t
group by range