Comprendre les différences entre le CUBE et le correctif CUMULATIF
Ma mission m'a demandé de savoir "combien de factures ont été écrites pour chaque jour?"
J'étais un peu coincé et a demandé à mon professeur de l'aide. Elle m'a envoyé une requête qui doit répondre à la question, "Combien de poêles de chaque type et version ont été construits?
Pour un défi, mais pas de points supplémentaires, inclure le nombre total de poêles".
C'était la requête qu'elle m'a envoyé:
SELECT STOVE.Type + STOVE.Version AS 'Type+Version'
, COUNT(*) AS 'The Count'
FROM STOVE
GROUP BY STOVE.Type + STOVE.Version WITH ROLLUP;
Donc, j'ai modifié cette requête jusqu'à ce qu'il répondait à mes besoins. C'est ce que je suis venu avec:
SELECT InvoiceDt
, COUNT(InvoiceNbr) AS 'Number of Invoices'
FROM INVOICE
GROUP BY InvoiceDt WITH ROLLUP
ORDER BY InvoiceDt ASC;
Et il a renvoyé les résultats suivants que je voulais.
De toute façon, j'ai décidé de lire sur les CUMULATIF de la clause et a commencé avec un article de Microsoft. Il a dit que le CUMULATIF de la clause a été similaire pour le CUBE de la clause, mais qu'il a été distingué par le CUBE de la clause de la manière suivante:
- CUBE génère un ensemble de résultats montre que les agrégats pour toutes les combinaisons de valeurs dans les colonnes sélectionnées.
- CUMULATIF génère un ensemble de résultats montre que les agrégats d'une hiérarchie de valeurs dans les colonnes sélectionnées.
Donc, j'ai décidé de remplacer le correctif CUMULATIF dans ma requête avec le CUBE pour voir ce qui allait se passer. Ils ont produit les mêmes résultats. Je suppose que c'est là où j'en suis confus.
Il semble que, si vous utilisez le type de requête que je suis ici, qu'il n'y a pas de différence pratique entre les deux clauses. Est ce que le droit? Ou, je ne suis pas à comprendre quelque chose? J'avais pensé, quand j'ai fini de lire l'article de Microsoft, que mes résultats devraient ai été différent avec le CUBE de la clause.
Vous devez vous connecter pour publier un commentaire.
Vous ne verrez aucune différence puisque vous êtes seulement de rouler sur une seule colonne. Considérons un exemple où nous ne
ROLLUP (YEAR, MONTH, DAY)
Avec un
ROLLUP
, elle aura les résultats suivants:Avec
CUBE
, il est le suivant:CUBE
essentiellement contient tous les possibles cumulatif scénario pour chaque nœud alors queROLLUP
gardera la hiérarchie dans le tact (afin de ne pas passer le MOIS et l'ANNÉE d'exposition/JOUR, alors queCUBE
va)C'est pourquoi vous ne voyez pas de différence, puisque vous n'aviez qu'une seule colonne, vous étiez à rouler.
Espère que ça aide.
Nous pouvons comprendre la différence entre le ROLLUP et CUBE avec un exemple simple. Considérons que nous avons un tableau qui contient les résultats de test trimestriel des élèves. Dans certains cas, nous avons besoin de voir le total correspondant pour le trimestre ainsi que les étudiants. Voici un exemple de tableau
1. CUMULATIF(Pouvez trouver total correspondant à une colonne)
(a) d'Obtenir un score total de chaque élève dans tous les quartiers.
Qui suit est le résultat de (a)
(b) au Cas où vous avez besoin pour obtenir le score total de chaque trimestre
Qui suit est le résultat de (b)
2. CUBE(Trouver total pour le Trimestre ainsi que des étudiants en un seul coup)
Qui suit est le résultat de
CUBE
Maintenant, vous demandez peut-être sur le temps réel d'utilisation de ROLLUP et CUBE. Parfois, nous avons besoin d'un rapport dans lequel nous avons besoin de voir le total de chaque trimestre et le total de chaque élève en un seul coup. Voici un exemple
Je suis l'évolution ci-dessus CUBE de requête légèrement, car nous avons besoin total pour les deux totaux.
Maintenant, vous obtiendrez le résultat suivant
C'est parce que vous avez seulement une colonne que vous êtes le regroupement.
Ajouter
Group by InvoiceDt, InvoiceCountry
(ou quel que soit le domaine vous donnera plus de données.Avec le Cube va vous donner une Somme pour chaque InvoiceDt et vous obtiendrez une Somme pour chaque InvoiceCountry.
Vous pouvez trouver plus de détails sur l'ENSEMBLE de REGROUPEMENT, de CUBE, de ROULEAU. TL;DR ils ont juste développez le GROUPE DE l'UNION de TOUS dans certaines façons d'obtenir de l'agrégation 🙂
https://technet.microsoft.com/en-us/library/bb510427(v=sql.105).aspx