sql >> Base de Datos >  >> RDS >> Oracle

GROUP BY / confusión de funciones agregadas en SQL

En SQL estándar (pero no en MySQL), cuando usa GROUP BY, debe enumerar todas las columnas de resultados que no son agregados en la cláusula GROUP BY. Entonces, si order_details tiene 6 columnas, entonces debe enumerar las 6 columnas (por nombre; no puede usar * en las cláusulas GROUP BY u ORDER BY) en la cláusula GROUP BY.

También puedes hacer:

SELECT order_no, SUM(order_price)
  FROM order_details
 GROUP BY order_no;

Eso funcionará porque todas las columnas no agregadas se enumeran en la cláusula GROUP BY.

Podrías hacer algo como:

SELECT order_no, order_price, MAX(order_item)
  FROM order_details
 GROUP BY order_no, order_price;

Esta consulta no es realmente significativa (o lo más probable es que no sea significativa), pero "funcionará". Enumerará cada combinación de número de pedido y precio de pedido por separado, y dará el artículo de pedido máximo (número) asociado con ese precio. Si todos los artículos de un pedido tienen precios distintos, terminará con grupos de una fila cada uno. OTOH, si hay varios artículos en el pedido al mismo precio (digamos £ 0.99 cada uno), entonces los agrupará y devolverá el número máximo de artículos del pedido a ese precio. (Supongo que la tabla tiene una clave principal en (order_no, order_item) donde el primer artículo del pedido tiene order_item = 1 , el segundo elemento es 2, etc.)