Necesito ayuda para enderezar algo, sé que es una pregunta muy fácil pero es algo que me está confundiendo un poco en SQL.GROUP BY/función agregada confusión en SQL
Esta consulta SQL arroja un error 'no una expresión GROUP BY' en Oracle. Entiendo por qué, ya que sé que una vez que agrupe por un atributo de una tupla, ya no puedo acceder a ningún otro atributo.
SELECT *
FROM order_details
GROUP BY order_no
Sin embargo esto se hace trabajar
SELECT SUM(order_price)
FROM order_details
GROUP BY order_no
Sólo al hormigón mi entendimiento en este .... Suponiendo que hay múltiples tuplas en order_details para cada orden que se hace, una vez que los grupos de tuplas de acuerdo con order_no, todavía puedo acceder al atributo order_price para cada tupla individual en el grupo, pero solo usando una función agregada?
En otras palabras, las funciones agregadas cuando se usan en la cláusula SELECT pueden profundizar en el grupo para ver los atributos 'ocultos', donde simplemente usar 'SELECT order_no' arrojará un error?
Gracias por su ayuda para aclarar esto, he tenido dificultades para encontrar una respuesta a esta pregunta específica en Google.
Chris
Bien, entonces después de que se ejecuta GROUP BY, todas las tuplas individuales para un order_no en particular todavía son accesibles por las funciones agregadas. Es decir, la función SUMA aún puede acceder al atributo order_price de cada tupla, aun cuando esas tuplas se hayan agrupado juntas por order_no? – Chris
@Chris: sí, más o menos. Puede pensar en GROUP BY dividiendo las filas de la tabla en grupos; cada grupo tiene el mismo conjunto de valores para las columnas enumeradas en la cláusula GROUP BY. Los agregados luego operan en cualquiera de las columnas especificadas, con el agregado calculado sobre las filas en el grupo. El resultado consiste entonces en una fila por grupo, con los valores de la columna GROUP BY más los agregados asociados. Hummm ... Espero que esté claro ... –
Sí, eso está completamente despejado hasta donde yo sé. Muchas gracias Jonathan y gracias a los otros chicos que respondieron! – Chris