88 votes

L'ordre des colonnes est-il important dans une clause de regroupement par ?

Si j'ai deux colonnes, l'une avec une cardinalité très élevée et l'autre avec une cardinalité très faible (nombre unique de valeurs), l'ordre dans lequel je regroupe les données a-t-il une importance ?

Voici un exemple :

select 
     dimensionName, 
     dimensionCategory, 
     sum(someFact)
from SomeFact f
join SomeDim d on f.dimensionKey = d.dimensionKey
group by 
    d.dimensionName,  -- large number of unique values
    d.dimensionCategory -- small number of unique values

Y a-t-il des situations où cela compte ?

79voto

OMG Ponies Points 144785

Non, l'ordre n'a pas d'importance pour la clause GROUP BY.

MySQL et SQLite sont les seules bases de données que je connais qui vous permettent d'omettre des colonnes du groupe par (non standard, non portable) mais l'ordre n'a pas d'importance là non plus.

28voto

gbn Points 197263

Le SQL est déclaratif.

Dans ce cas, vous avez indiqué à l'optimiseur comment vous vouliez que les données soient regroupées et il a trouvé comment le faire.

Il ne va pas évaluer ligne par ligne (procédural) et regarder d'abord une colonne.

L'ordre des colonnes a surtout de l'importance pour les index. col1, col2 n'est pas la même chose que col2, col1 . Du tout.

12voto

sqlvogel Points 12567

Il existe une fonction ancienne et non standard de Microsoft SQL Server appelée ROLLUP. ROLLUP est une extension de la syntaxe GROUP BY et lorsqu'elle est utilisée, l'ordre des colonnes GROUP BY détermine quelles colonnes doivent être regroupées dans le résultat. ROLLUP est cependant déprécié. L'alternative SQL standard consiste à utiliser des ensembles de regroupement, ce qui est pris en charge par SQL Server 2008 et les versions ultérieures.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X