¿Qué significa la cláusula SQL "GROUP BY 1"?

Resuelto Spencer asked hace 13 años • 6 respuestas

Alguien me envió una consulta SQL donde la GROUP BYcláusula consistía en la declaración: GROUP BY 1.

Esto debe ser un error tipográfico ¿verdad? Ninguna columna recibe el alias 1. ¿Qué podría significar esto? ¿Tengo razón al suponer que debe ser un error tipográfico?

Spencer avatar Sep 13 '11 02:09 Spencer
Aceptado

Significa agrupar por la primera columna de su conjunto de resultados independientemente de cómo se llame. Puedes hacer lo mismo con ORDER BY.

Yuck avatar Sep 12 '2011 19:09 Yuck
SELECT account_id, open_emp_id
         ^^^^        ^^^^
          1           2

FROM account
GROUP BY 1;

En la consulta anterior GROUP BY 1se refiere a first column in select statementcuál es account_id.

También puedes especificar en ORDER BY.

Nota: El número en ORDER BY y GROUP BY siempre comienza con 1, no con 0.

Vishwanath Dalvi avatar Sep 12 '2011 19:09 Vishwanath Dalvi

Además de agrupar por nombre de campo, también puede agrupar por ordinal o posición del campo dentro de la tabla. 1 corresponde al primer campo (independientemente del nombre), 2 es el segundo, y así sucesivamente.

Por lo general, esto no es aconsejable si está agrupando algo específico, ya que la estructura de la tabla/vista puede cambiar. Además, puede resultar difícil comprender rápidamente qué está haciendo su consulta SQL si no ha memorizado los campos de la tabla.

Si está devolviendo un conjunto único o realizando rápidamente una búsqueda temporal, esta es una buena sintaxis abreviada para reducir la escritura. Si planea ejecutar la consulta nuevamente en algún momento, le recomiendo reemplazarlas para evitar futuras confusiones y complicaciones inesperadas (debido a cambios en el esquema).

vol7ron avatar Sep 12 '2011 19:09 vol7ron