说我有房地产的一个表:组按价格范围
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。
说我有房地产的一个表:组按价格范围
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。
您可以GROUP BY
的李毅华,这样的事情:
SELECT price/50000*50000 AS minPrice,
(price/50000+1)*50000-1 AS maxPrice,
COUNT(*)
FROM table
GROUP BY price/50000;
我想你甚至可以用GROUP BY表达式中提到的tvanfosson来避免子查询。尽管你应该测量哪种方式更好。 – 2010-01-04 14:00:00
取决于你是否会接受语句中的子查询,还自称是一个声明。假设您希望扩展范围,使用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
http://stackoverflow.com/questions/232387/in-sql-how-can-you-group-by-in-ranges – 2010-01-04 13:07:45
要诚实,并接受你最近的问题的答案。 – hsz 2010-01-04 13:11:31