Alguém me enviou uma consulta SQL em que a GROUP BY
cláusula consistia na declaração:GROUP BY 1
.
Isso deve ser um erro de digitação, certo? Nenhuma coluna recebe o alias 1. O que isso pode significar? Estou certo em assumir que isso deve ser um erro de digitação?
Respostas:
Significa agrupar pela primeira coluna, independentemente do nome. Você pode fazer o mesmo com
ORDER BY
.fonte
Na consulta acima,
GROUP BY 1
refere-se aofirst column in select statement
que éaccount_id
.Você também pode especificar
ORDER BY
.fonte
Além de agrupar pelo nome do campo, você também pode agrupar por ordinal ou posição do campo na tabela. 1 corresponde ao primeiro campo (independentemente do nome), 2 é o segundo e assim por diante.
Isso geralmente é desaconselhável se você estiver agrupando algo específico, pois a estrutura da tabela / exibição pode mudar. Além disso, pode ser difícil compreender rapidamente o que sua consulta SQL está fazendo se você não memorizou os campos da tabela.
Se você estiver retornando um conjunto exclusivo ou executando rapidamente uma pesquisa temporária, essa é uma sintaxe abreviada para reduzir a digitação. Se você planeja executar a consulta novamente em algum momento, recomendo substituí-las para evitar futuras confusões e complicações inesperadas (devido a alterações no esquema).
fonte
Agrupará por primeiro campo na cláusula de seleção
fonte
Isso significa que sql agrupa pela 1ª coluna na sua cláusula select, sempre a usamos
GROUP BY 1
juntamente comORDER BY 1
, além de que você também pode usar assimGROUP BY 1,2,3..
, é claro que é conveniente para nós, mas você precisa prestar atenção a essa condição, pois o resultado pode não ser o que você deseja. deseja que alguém modifique suas colunas de seleção e não seja visualizadofonte
Agrupará pela posição da coluna que você coloca após a cláusula agrupar.
por exemplo, se você executar "
SELECT SALESMAN_NAME, SUM(SALES) FROM SALES GROUP BY 1
", ele será agrupado porSALESMAN_NAME
.Um risco é que, se você executar '
Select *
' e, por algum motivo, recriar a tabela com colunas em uma ordem diferente, ele fornecerá um resultado diferente do que você esperaria.fonte