¿Qué significa la cláusula SQL "GROUP BY 1"?
Alguien me envió una consulta SQL donde la GROUP BY
clá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?
Significa agrupar por la primera columna de su conjunto de resultados independientemente de cómo se llame. Puedes hacer lo mismo con ORDER BY
.
SELECT account_id, open_emp_id
^^^^ ^^^^
1 2
FROM account
GROUP BY 1;
En la consulta anterior GROUP BY 1
se refiere a first column in select statement
cuá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.
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).