web-dev-qa-db-fra.com

SQL distinct pour 2 champs dans une base de données

Pouvez-vous obtenir la combinaison distincte de 2 champs différents dans une table de base de données? Si oui, pouvez-vous fournir l'exemple SQL?.

81
leora

Pourquoi pas simplement:

select distinct c1, c2 from t

ou

select c1, c2, count(*)
from t
group by c1, c2
121
Howard Pinsley

Si vous voulez des valeurs distinctes pour deux champs seulement, et renvoyer d'autres champs avec elles, les autres champs doivent avoir une sorte d'agrégation (somme, min, max, etc.), et les deux colonnes que vous voulez distinguer doivent apparaître dans la clause group by. Sinon, c'est comme le dit Decker.

15

Vous pouvez obtenir un résultat distinct par deux colonnes utilisées ci-dessous SQL:

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

Si vous souhaitez toujours grouper uniquement par une colonne (comme je le souhaitais), vous pouvez imbriquer la requête:

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

Partagez ma pensée stupide:

Peut-être que je ne peux sélectionner distinct que sur c1 mais pas sur c2, la syntaxe peut donc être select ([distinct] col)+distinct est un qualificatif pour chaque colonne.

Mais après réflexion, je trouve que distinct sur une seule colonne est un non-sens. Prenons la relation suivante:

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

Si nous select (distinct A), B, alors quel est le bon B pour A = 1?

Ainsi, distinct est un qualificatif pour un statement.

1
youkaichao