2010-01-04 85 views
6

说我有房地产的一个表:组按价格范围

A 15,000 
B 50,000 
C 100,000 
D 25,000 

我想他们按0 - 49,999 50,000 - 99,999和100,000 - 200000

所以结果应该是:

0 - 49k (2) 
50k - 99k (1) 
100k - 200k (1) 

有没有办法在一个SQL语句中做到这一点?顺便说一句,我正在使用Postgres。

+2

http://stackoverflow.com/questions/232387/in-sql-how-can-you-group-by-in-ranges – 2010-01-04 13:07:45

+3

要诚实,并接受你最近的问题的答案。 – hsz 2010-01-04 13:11:31

回答

10

您可以GROUP BY的李毅华,这样的事情:

SELECT price/50000*50000 AS minPrice, 
    (price/50000+1)*50000-1 AS maxPrice, 
    COUNT(*) 
FROM table 
GROUP BY price/50000; 
+0

我想你甚至可以用GROUP BY表达式中提到的tvanfosson来避免子查询。尽管你应该测量哪种方式更好。 – 2010-01-04 14:00:00

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