按价格范围分组

时间:2010-01-04 13:05:05

标签: sql postgresql count group-by

说我有一张房地产物业表:

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。

2 个答案:

答案 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