Sqlserver
 sql >> Base de Dados >  >> RDS >> Sqlserver

grupo sql por versus distinto


GROUP BY mapeia grupos de linhas para uma linha, por valor distinto em específico colunas, que nem necessariamente precisam estar na lista de seleção.
SELECT b, c, d FROM table1 GROUP BY a;

Esta consulta é SQL legal (correção: apenas no MySQL; na verdade, não é SQL padrão e não é suportado por outras marcas). O MySQL aceita e confia que você sabe o que está fazendo, selecionando b , c e d de forma inequívoca porque são dependências funcionais de a .

No entanto, o Microsoft SQL Server e outras marcas não permitem essa consulta, pois não podem determinar facilmente as dependências funcionais. editar: Em vez disso, o SQL padrão exige que você siga a Regra de valor único , ou seja, cada coluna na lista de seleção deve ser nomeada no GROUP BY cláusula ou então ser um argumento para uma função set.

Considerando que DISTINCT sempre examina todas as colunas na lista de seleção e apenas essas colunas. É um equívoco comum que DISTINCT permite especificar as colunas:
SELECT DISTINCT(a), b, c FROM table1;

Apesar dos parênteses fazerem DISTINCT parece chamada de função, não é. É uma opção de consulta e um valor distinto em qualquer um dos três campos da lista de seleção levará a uma linha distinta no resultado da consulta. Uma das expressões nesta lista de seleção tem parênteses, mas isso não afetará o resultado.