À l'aide DISTINCTES avec GROUP BY en SQL Server
Est-il un objectif pour l'utilisation à la fois DISTINCTES et GROUP BY en SQL?
Ci-dessous est un exemple de code
SELECT DISTINCT Actors
FROM MovieDetails
GROUP BY Actors
Quelqu'un sait-il d'une situation où à la fois DISTINCTES et GROUPE PAR la nécessité de être utilisés, pour obtenir spécifique résultats escomptés?
(Le général l'utilisation de DISTINCT et de GROUPE PAR séparément est compris)
Vous pouvez l'utiliser dans
non, vous pouvez déposer le
Il y A quelques semaines, j'ai été la navigation par le biais de quelques articles et suis tombé sur une discussion à propos de certains cas d'utilisation de ce. Je ne pouvais pas trouver que l'article de nouveau. Par conséquent, j'ai pensé que je pourrais le poster ici! Mais j'ai l'idée qu'il est superflu d'utiliser à la fois dans presque tous les cas!
L'un ou l'autre ou les deux, vous obtenez le même plan de requête et les mêmes résultats. Test pour vous-même.
SELECT ..., COUNT(DISTINCT ...) FROM ... GROUP BY ...
. Dans votre cas, il est inutilenon, vous pouvez déposer le
DISTINCT
, c'est redondantgroup by
offre distinct
résultats. À quoi pourrait-il y avoir à ajouter? Pensez-yIl y A quelques semaines, j'ai été la navigation par le biais de quelques articles et suis tombé sur une discussion à propos de certains cas d'utilisation de ce. Je ne pouvais pas trouver que l'article de nouveau. Par conséquent, j'ai pensé que je pourrais le poster ici! Mais j'ai l'idée qu'il est superflu d'utiliser à la fois dans presque tous les cas!
L'un ou l'autre ou les deux, vous obtenez le même plan de requête et les mêmes résultats. Test pour vous-même.
OriginalL'auteur Vamsi | 2015-09-21
Vous devez vous connecter pour publier un commentaire.
Utilisation
DISTINCT
pour supprimer les doublons deGROUPING SETS
de laGROUP BY
clauseComplètement idiot exemple à l'aide de
GROUPING SETS()
en général (ou le groupe spécial définitROLLUP()
ouCUBE()
en particulier), vous pouvez utiliserDISTINCT
afin de supprimer les valeurs en double produite par les regroupements de nouveau:Avec
DISTINCT
:Sans
DISTINCT
:Mais pourquoi, en dehors de faire un universitaire point, le feriez-vous?
Utilisation
DISTINCT
à trouver unique fonction d'agrégation des valeursDe moins en moins farfelue exemple, vous pourriez être intéressé par le
DISTINCT
valeurs agrégées, comme, combien de différents de dupliquer les numéros d'acteurs sont là?Réponse:
Utilisation
DISTINCT
de supprimer les doublons avec plus d'unGROUP BY
colonneUn autre cas, bien sûr, est celui-ci:
Avec
DISTINCT
:Sans
DISTINCT
:Pour plus de détails, j'ai écrit quelques billets de blog, par exemple à propos de
regroupements
et comment ils influencent leGROUP BY
fonctionnement, ou sur l'ordre logique des opérations SQL (par opposition à l'ordre lexical des opérations).J'ai pensé à la même chose, mais je ne pouvais pas penser à un cas où
HAVING
change quoi que ce soit.Le dernier exemple est le même que
SELECT actors FROM (VALUES('a', 1), ('a', 1), ('b', 1), ('b', 2)) t(actors, id) GROUP BY actors
alors, pourquoi avoir besoin distinctes?Trouver différents acteurs avec plus d'un ID? il y a d'autres façons d'y arriver, mais ses par exemple souci
Peut-être, mais je préfère utiliser
SELECT actors, COUNT(DISTINCT id) FROM (VALUES('a', 1), ('a', 1), ('b', 1), ('b', 2)) t(actors, id) GROUP BY actors
OriginalL'auteur Lukas Eder
Peut-être pas dans le contexte que vous avez, mais vous pouvez utiliser
Vous pouvez utiliser ce retour à différents niveaux d'agrégation retourné en une seule ligne. L'utilisation serait le cas lorsqu'un seul groupe, ne suffirait pas à tous les agrégats nécessaires.
OVER (PARTITION BY)
? PasGROUP BY
À noter toutefois qu'il n'y a pas de
GROUP BY
dans votre proposition principale si ce n'est techniquement pas le cas qu'on a demandé à propos.OriginalL'auteur Brad D