SQL count(*) et distincte
Pourquoi ne pouvons-nous pas utiliser count(distinct *)
en SQL? Comme pour compter toutes les lignes distinctes?
Qu'entendez-vous par "lignes distinctes'?
Avez-vous des lignes dupliquées dans l'ensemble de la ligne, c'est que ce que vous essayez de trouver?
Maintenant, quand j'y pense,parce que nos tableaux sont normalisées nous n'auront pas exactement la même lignes de sorte que son inutile droit?? Est-ce la raison??
Si vous avez la normalisation à un niveau où les clés primaires, existent, vous avez raison, toutes les lignes seront distincts dans ce cas.
Avez-vous des lignes dupliquées dans l'ensemble de la ligne, c'est que ce que vous essayez de trouver?
Maintenant, quand j'y pense,parce que nos tableaux sont normalisées nous n'auront pas exactement la même lignes de sorte que son inutile droit?? Est-ce la raison??
Si vous avez la normalisation à un niveau où les clés primaires, existent, vous avez raison, toutes les lignes seront distincts dans ce cas.
OriginalL'auteur Nitish Upreti | 2009-12-01
Vous devez vous connecter pour publier un commentaire.
Bien que je suggère fortement que vous re-pense à toutes les requêtes qui utilisent
DISTINCT
. Dans un grand pourcentage de cas,GROUP BY
est plus approprié (et plus rapide).EDIT: Avoir lu la question des commentaires, je tiens à souligner que vous devriez jamais demander le SGBD pour faire plus de travail que réellement besoin de faire pour obtenir un résultat. Si vous savez à l'avance qu'il n'y aura pas toutes les lignes en double dans une table, puis ne pas utiliser
DISTINCT
.Sur Oracle DISTINCTES et de GROUPE ont le même plan d'exécution parce que DISTINCTS, mis en œuvre en utilisant le GROUPE de PAR. Il devrait donc y avoir aucune différence.
Désolé, j'ai oublié que SQL Server est un peu douteux avec des requêtes imbriquées. L'ajout d'un nom d'alias sur la fin (
as T
) a résolu le problème.cheers 🙂
Il est tout au sujet demandant le moins de travail à faire. Conceptuellement parlant,
GROUP BY
demande moins de travail queDISTINCT
, et donc parfois, pas toujours, accroître l'efficacité du plan. Voir aussi la différence entreJOIN
etEXISTS
.OriginalL'auteur Christian Hayter
Vous pouvez sélectionner toutes les colonnes du tableau et le groupe en...
OriginalL'auteur Jason Punyon
pourquoi pas?
Désolé, c'était un autre texte dans la question quand j'ai répondu.
OriginalL'auteur silent
Vous pouvez en effet.
Si vous avez un identifiant, cependant, vous n'aurez pas entièrement les différentes lignes. Mais vous pourriez le faire par exemple:
OriginalL'auteur David Hedlund
COUNT(*) est le nombre de lignes correspondant à une requête.
Une ligne contient des informations uniques rowid. Toutes les lignes sont par définition distincte.
Vous devez compter les différentes instances de valeurs dans un certain domaine à la place.
OriginalL'auteur Will
Vous pouvez essayer une expression de table commune dans Sql Server 2005
Pour répondre à la question, à Partir de la documentation
Sql Server Documentation D'Aide. msdn.microsoft.com/en-us/library/ms175997.aspx
OriginalL'auteur Adriaan Stander
certains languajes peut ne pas être en mesure de traiter distinctement *' donc, si vous voulez la distinction faite par de nombreuses colonnes que vous souhaitez utiliser distinctes de ColumnA || Colonneb' , combinant les valeurs avant de juger si elles sont différentes. Être attentif si vos variables sont numériques et de votre base de données gestionnaire peut faire transtypage automatique de chaînes de caractères.
OriginalL'auteur Jose Antonio Padros
UberKludge, et peut-être postgre spécifiques, mais
OriginalL'auteur richo
OriginalL'auteur May