2010-01-04 14 views
6

Decir que tengo una tabla de propiedades de bienes raíces:grupo en función del precio

A 15,000 
B 50,000 
C 100,000 
D 25,000 

me gustaría agruparlos por 0 - 49999, 50000 - 99999 y 100000 - 200000

Así, el resultado debería ser:

0 - 49k (2) 
50k - 99k (1) 
100k - 200k (1) 

¿Hay alguna manera de hacerlo en una declaración SQL? Estoy usando Postgres por cierto.

+2

http://stackoverflow.com/questions/232387/in-sql-how-can-you-group-by-in-ranges –

+3

Sea honesto y aceptar respuestas para sus preguntas recientes. – hsz

Respuesta

10

Puede GROUP BY un experession, algo así:

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

Supongo que incluso podría usar CASE que tvanfosson mencionó en la expresión GROUP BY evitando subconsultas al mismo tiempo. Aunque debe medir de qué manera funciona mejor. –

4

depende de si usted aceptaría una subselección en la declaración y todavía llamarlo un comunicado. Suponiendo que desea extender sus rangos, una subselección con una declaración de caso para establecer el rango, entonces una agrupación de selección externa por rango funcionaría. Si todos sus rangos fueran del mismo tamaño, sería más fácil ya que podría dividir por el tamaño del rango y agruparlos.

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 
Cuestiones relacionadas