8
votes

Pourquoi ne compte pas (distinct (*)) fonctionner?

Je suis toujours surpris pourquoi la requête aussi simple ne fonctionne pas: xxx pré>

où comme p> xxx pré>

et p>

SELECT DISTINCT * FROM dbo.t_test 


0 commentaires

4 Réponses :


21
votes

Cela ne fonctionne pas car vous n'êtes autorisé à spécifier qu'une seule expression dans compter (distincte ...) selon le documentation : xxx

Si vous regardez soigneusement, vous pouvez voir que la grammaire autorisée ne fait pas t Inclure Nombre (distinct *) .

L'alternative est la suivante: xxx


0 commentaires

3
votes

comme un exemple simple, disons que vous avez deux colonnes, A et B.

A    B
1    100
2    100
3    100


1 commentaires

Merci Joe! J'ai mis à jour la question concernant votre explication.



4
votes

En plus de ce que les autres ont dit:

Une chose à prendre conscience est que faire un compter (distinct *) (s'il était autorisé) sur une table présentée une clé primaire serait identique à un compte SELECT ( *) .

Ceci est parce que distinct * inclut la colonne PK et à chaque rangée est distincte de toutes les autres rangées.

et comme chaque table non triviale doit avoir une clé primaire (il n'y a que très à quelques exceptions près à cette règle) comptage (distinct *) peut être "remplacé" avec compte (*) de toute façon.


0 commentaires

7
votes

La vérité de la matière est que SQL (serveur) ou toute autre implémentation SQL est non censée faire tout sous le soleil.

Il y a des raisons de limiter la syntaxe SQL à certains éléments, à partir de la couche d'analyse à une optimisation de la requête à la prévisibilité des résultats à un bon sens commun.

La fonction d'agrégat de comptage est normalement implémentée comme un agrégat en continu avec une porte pour un seul élément, que ce soit * (nombre d'enregistrements, utilisez simplement un jeton statique) ou colname (incrément de jeton uniquement lorsqu'il n'est pas null) ou Colname distinct (un hachage / godet avec une touche unique).

Lorsque vous demandez compter (distinct *) ou pour cette affaire, comptage (distinct A, B, C) - Oui, il peut sûrement être fait pour vous Si certains RDBMS s'adressent à la mettre en œuvre un jour; Mais c'est (1) peu de temps suffisamment (2) ajoute que le travail à l'analyseur (3) ajoute de la complexité à la mise en œuvre du compte.

marque a La bonne variante .


0 commentaires