Estoy obteniendo ORA-00979 con la siguiente consulta:
SELECT cr.review_sk, cr.cs_sk, cr.full_name,
tolist(to_char(cf.fact_date, 'mm/dd/yyyy')) "appt",
cs.cs_id, cr.tracking_number
from review cr, cs, fact cf
where cr.cs_sk = cs.cs_sk
and UPPER(cs.cs_id) like '%' || UPPER(i_cs_id) || '%'
and row_delete_date_time is null
and cr.review_sk = cf.review_wk (+)
and cr.fact_type_code (+) = 183050
GROUP BY cr.review_sk, cr.cs_sk, cf.fact_date, cr.tracking_number
ORDER BY cs.cs_id, cr.full_name;
No pude encontrar ningún ejemplo que tuviera cláusulas GROUP BY y ORDER BY en la misma consulta. Intenté eliminar cada campo del grupo de a uno por vez, pero sigo recibiendo el mismo error.
Incluya en la
GROUP BY
cláusula todas lasSELECT
expresiones que no sean argumentos de función de grupo.fuente
Lástima que Oracle tenga limitaciones como estas. Claro, el resultado para una columna que no está en GROUP BY sería aleatorio, pero a veces quieres eso. Oracle tonto, puedes hacer esto en MySQL / MSSQL.
PERO hay una solución para Oracle:
Si bien la siguiente línea no funciona
Puede engañar a Oracle con algunos ceros como el siguiente, para mantener su columna dentro del alcance, pero no agruparla (suponiendo que se trata de números, de lo contrario use CONCAT)
fuente
Si la agrupación en virtud de la inclusión de
GROUP BY
la cláusula, cualquier expresión enSELECT
, que no es función de grupo (o función de agregado o columna agregada), tales comoCOUNT
,AVG
,MIN
,MAX
,SUM
y así sucesivamente ( Lista de funciones de agregación ) debe estar presente enGROUP BY
cláusula.Ejemplo (forma correcta) (aquí
employee_id
no es una función de grupo (columna no agregada), por lo que debe aparecer enGROUP BY
. Por el contrario, sum (salario) es una función de grupo (columna agregada), por lo que no es necesario que aparezca en laGROUP BY
cláusula .Ejemplo (forma incorrecta) (aquí
employee_id
no hay función de grupo y no aparece en laGROUP BY
cláusula, lo que conducirá al error ORA-00979.Para corregir necesita hacer uno de los siguientes:
SELECT
cláusula en laGROUP BY
cláusulaSELECT
cláusula.fuente
Debes hacer lo siguiente:
fuente
El mismo error también se produce cuando la palabra clave SUPERIOR o INFERIOR no se usa en ambos lugares en la expresión de selección y en el grupo por expresión.
Incorrecto :-
Derecho :-
fuente
El grupo by se usa para agregar algunos datos, dependiendo de la función de agregado, y aparte de eso, debe colocar la columna o columnas en las que necesita la agrupación.
por ejemplo:
Esto dará como resultado el salario máximo del departamento.
Ahora, si omitimos la
d.deptno
cláusula from group by, dará el mismo error.fuente
Además de las otras respuestas, este error puede resultar si hay una inconsistencia en un orden por cláusula. Por ejemplo:
fuente