说我有一张房地产物业表:
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语句中执行此操作?顺便说一下,我正在使用Postgres。
答案 0 :(得分:10)
你可以GROUP BY
表达类似的东西:
SELECT price/50000*50000 AS minPrice,
(price/50000+1)*50000-1 AS maxPrice,
COUNT(*)
FROM table
GROUP BY price/50000;
答案 1 :(得分:4)
取决于您是否接受声明中的子选择并仍称其为一个声明。假设您希望扩展范围,使用case语句设置范围的子选择,则按范围进行外部选择分组将起作用。如果您的所有范围都是相同的大小,那么您可以更容易地除以范围大小和组。
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