Alguien me envió una consulta SQL en la GROUP BY
cláusula consistió 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 esto debe ser un error tipográfico?
Respuestas:
Significa agrupar por la primera columna, independientemente de cómo se llame. Puedes hacer lo mismo con
ORDER BY
.fuente
En la consulta anterior se
GROUP BY 1
refiere afirst column in select statement
cuál esaccount_id
.También puede especificar en
ORDER BY
.fuente
Además de agrupar por el nombre del 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.
Esto generalmente no es aconsejable si está agrupando en algo específico, ya que la estructura de la tabla / vista puede cambiar. Además, puede ser difícil comprender rápidamente lo que está haciendo su consulta SQL si no ha memorizado los campos de la tabla.
Si devuelve un conjunto único o realiza 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 reemplazarlos para evitar futuras confusiones y complicaciones inesperadas (debido a cambios en el esquema).
fuente
Se agrupará por primer campo en la cláusula select
fuente
Eso significa agrupar sql por primera columna en su cláusula select, siempre usamos esto
GROUP BY 1
junto conORDER BY 1
, además de que también puede usarlo asíGROUP BY 1,2,3..
, por supuesto, es conveniente para nosotros, pero debe prestar atención a esa condición, el resultado puede no ser lo que usted desea. si alguien ha modificado sus columnas de selección y no se visualizafuente
Se agrupará por la posición de la columna que coloca después de la cláusula group by.
por ejemplo, si ejecuta '
SELECT SALESMAN_NAME, SUM(SALES) FROM SALES GROUP BY 1
' se agrupará porSALESMAN_NAME
.Un riesgo al hacerlo es si ejecuta '
Select *
' y, por alguna razón, vuelve a crear la tabla con columnas en un orden diferente, le dará un resultado diferente al esperado.fuente