2011-03-19 12 views
7

por ejemplo tengo esta tabla:GRUPO POR ignorar un atributo

grupo de elementos | descripción | precio
A, a, 10
A, B, 12
A, c, 14
B, g, 11
B, h, 16

ahora quiero para seleccionar las filas con el más alto precio en un grupo como este:

a, C, 14
B, h, 16

La consulta SQL (es completamente funcional) wich me pone cerca de este es:

SELECT itemgroup, MAX(price) 
FROM table 
GROUP BY itemgroup 

A, 14 B
, 16

Al tratar este me sale un "no es una expresión GROUP BY" -error:

SELECT itemgroup, description, MAX(price) 
FROM table 
GROUP BY itemgroup 

necesito algo como esto seudo consulta:

SELECT itemgroup, IGNORE(description), MAX(price) 
FROM table 
GROUP BY itemgroup 

Espero haber podido explicar mi pequeño problema.

Respuesta

8

normalmente termino haciendo algo como:

SELECT t1.itemgroup, t1.description, t1.price 
FROM table t1, 
    (SELECT itemgroup, MAX(price) as price 
    FROM table 
    GROUP BY itemgroup) t2 
WHERE t1.itemgroup = t2.itemgroup 
AND t1.price = t2.price 
+0

Gracias, eso debería hacer la magia :) – Pew

+0

Sí, lo eliminé inmediatamente, ¡gracias por la información! – Pew

3

Usar las funciones analíticas:

SELECT itemgroup, description, price FROM 
    (select itemgroup, description, price, RANK() 
    OVER (PARTITION BY itemgroup ORDER BY max(price) DESC) as rank 
    FROM group by itemgroup,description,price)a 
WHERE a.rank = 1 
ORDER BY itemgroup; 

Hay una gran cantidad de energía en las funciones analíticas - aprendizaje de ellos le puede ayudar en muchas situaciones

Cuestiones relacionadas