按价格范围分组

Dav*_*vid 6 sql postgresql group-by count

说我有一张房地产物业表:

A  15,000
B  50,000
C 100,000
D  25,000
Run Code Online (Sandbox Code Playgroud)

我想将它们分为0 - 49,999,5,000 - 99,999和100,000 - 200,000

所以结果应该是:

   0 -  49k (2)
 50k -  99k (1)
100k - 200k (1)
Run Code Online (Sandbox Code Playgroud)

有没有办法在一个SQL语句中执行此操作?我顺便使用Postgres.

Nic*_*hen 10

你可以进行GROUP BY一次类似的训练:

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


tva*_*son 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
Run Code Online (Sandbox Code Playgroud)