按价格范围分组

6
说我有一张房地产物业表:
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
https://dev59.com/enVC5IYBdhLWcg3woCrN - Captain Comic
3
诚实并接受你最近提出的问题的答案。 - hsz
2个回答

10
你可以使用 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提到的CASE,同时避免子查询。不过你应该测量哪种方式更有效。 - Nicht Verstehen

5

取决于您是否接受在语句中使用子查询并仍将其称为一个语句。假设您希望扩展范围,那么带有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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接