【问题标题】:group by price range按价格范围分组
【发布时间】:2011-01-01 05:57:35
【问题描述】:

假设我有一张房地产表:

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。

【问题讨论】:

标签: sql postgresql count group-by


【解决方案1】:

您可以GROUP BY 一种表达方式,类似这样:

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

【讨论】:

  • 我想你甚至可以使用 tvanfosson 在 GROUP BY 表达式中提到的 CASE,同时避免子查询。尽管您应该衡量哪种方式表现更好。
【解决方案2】:

取决于您是否会接受语句中的子选择并仍将其称为一个语句。假设您希望扩展范围,使用 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

【讨论】:

  • 太棒了!你拯救了我的一天!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-11-07
  • 2016-05-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-12-04
  • 2020-04-29
相关资源
最近更新 更多