SQL distinto para 2 campos em um banco de dados

84

Você pode obter a combinação distinta de 2 campos diferentes em uma tabela de banco de dados? em caso afirmativo, você pode fornecer o exemplo SQL.

Leora
fonte

Respostas:

128

Que tal simplesmente:

select distinct c1, c2 from t

ou

select c1, c2, count(*)
from t
group by c1, c2
Howard Pinsley
fonte
Dependendo dos dados, agrupar por é mais lento que distinto
noizer
5
Para aqueles que estão vendo Operand should contain 1 column(s)erros, o problema é que provavelmente você está fazendo select distinct(c1, c2) from te não tem permissão para colchetes aqui. Foi assim que cheguei aqui.
BookOfGreg
16

Se você quiser valores distintos de apenas dois campos, além de retornar outros campos com eles, os outros campos devem ter algum tipo de agregação (soma, mínimo, máximo, etc.), e as duas colunas que você deseja distinto devem aparecer em a cláusula group by. Caso contrário, é como diz Decker.

Jeffrey L Whitledge
fonte
7

Você pode obter resultados distintos por duas colunas usadas abaixo do SQL:

SELECT COUNT(*) FROM (SELECT DISTINCT c1, c2 FROM [TableEntity]) TE
Wilson Wu
fonte
5

Se você ainda deseja agrupar apenas por uma coluna (como eu queria), você pode aninhar a consulta:

select c1, count(*) from (select distinct c1, c2 from t) group by c1
Denno
fonte
3

Compartilhe meu pensamento estúpido:

Talvez eu possa selecionar distinto apenas em c1, mas não em c2, então a sintaxe pode ser select ([distinct] col)+onde distinctestá um qualificador para cada coluna.

Mas depois de pensar, acho que distinto em apenas uma coluna é um absurdo . Considere a seguinte relação:

   | A | B
__________
  1| 1 | 2
  2| 1 | 1

Se nós select (distinct A), B, então o que é o bom Bpara A = 1?

Portanto, distincté um qualificador para a statement.

youkaichao
fonte