2010-01-04 78 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