Maison >base de données >tutoriel mysql >OLAP : ENSEMBLES DE CUBES, ROLLUP ET GROUPEMENTS

OLAP : ENSEMBLES DE CUBES, ROLLUP ET GROUPEMENTS

WBOY
WBOYoriginal
2024-07-16 15:16:421069parcourir

OLAP: CUBE, ROLLUP, AND GROUPING SETS

Dans le domaine de l'analyse des données et de la business intelligence, OLAP (Online Analytical Processing) constitue une technologie fondamentale, facilitant l'analyse multidimensionnelle de vastes ensembles de données. OLAP permet aux utilisateurs d'obtenir des informations à partir des données en les analysant dans plusieurs dimensions, offrant ainsi une vue complète des indicateurs et des performances de l'entreprise.

Nous allons donc maintenant discuter des trois fonctionnalités clés d'OLAP qui sont les opérateurs CUBE, ROLLUP ET GROUPING SETS. Cela jouera un rôle central dans la synthèse et l'agrégation des données de diverses manières.

Parlons d'abord du premier qui est :

CUBE

Le cube est un outil puissant en OLAP, il peut générer toutes les combinaisons possibles de dimension et leur agrégat. Il fournit une vue multidimensionnelle complète des données en calculant les sous-totaux et les totaux pour chaque combinaison de dimensions, permettant aux utilisateurs d'explorer les données sous différents angles et niveaux de granularité.

D'accord, c'est un peu technique au début, mais vous le comprendrez sûrement lorsque nous allons l'utiliser dans une requête.

Disons que nous voulons connaître le nombre de chaque personne qui loue dans un pays et quel est son sexe.

SELECT country, 
       gender,
       COUNT(*)
FROM rentals
GROUP BY CUBE(country, gender) -- This one will group them by its country and gender.

Le résultat sera donc ceci

| country    | gender   | COUNT(*) |
|------------|----------|----------|
| USA        | Male     | 100      |
| USA        | Female   | 150      |
| UK         | Male     | 120      |
| UK         | Female   | 130      |
| NULL       | Male     | 220      |  <-- Subtotal for Male across all countries
| NULL       | Female   | 280      |  <-- Subtotal for Female across all countries
| USA        | NULL     | 250      |  <-- Subtotal for USA across all genders
| UK         | NULL     | 250      |  <-- Subtotal for UK across all genders
| NULL       | NULL     | 500      |  <-- Grand total

Voir chaque ligne représente une combinaison unique de « pays » et de « sexe ». C'est l'utilisation de CUBE, il générera toutes les combinaisons possibles en fonction de ce que vous agrégez. nous avons un sous-total pour chaque catégorie et le grand total.


RECOMMANDATION

L'opérateur ROLLUP est utilisé pour générer des données de cumul hiérarchiques. Il calcule les sous-totaux pour une hiérarchie prédéfinie de dimensions, passant généralement du niveau de granularité le plus détaillé au moins détaillé. Il génère des sous-totaux pour chaque niveau de la hiérarchie, produisant un ensemble de résultats comprenant des sous-totaux pour chaque combinaison des colonnes spécifiées, ainsi que des totaux généraux. C'est comme plus d'organisation, alors faisons à nouveau un exemple.

SELECT 
    country, 
    gender,
    COUNT(*) AS rental_count
FROM 
    rentals
GROUP BY 
    ROLLUP (country, gender);

Ensuite, le résultat sera ceci

| country  | gender  | rental_count |
|----------|---------|--------------|
| NULL     | NULL    | 8            |  <-- Grand total
| NULL     | Male    | 3            |  <-- Subtotal for Male across all countries
| NULL     | Female  | 5            |  <-- Subtotal for Female across all countries
| USA      | NULL    | 3            |  <-- Subtotal for USA across all genders
| USA      | Male    | 2            |
| USA      | Female  | 1            |
| UK       | NULL    | 3            |  <-- Subtotal for UK across all genders
| UK       | Male    | 1            |
| UK       | Female  | 2            |

vous voyez son organisation après le décompte de chaque catégorie, il imprimera le sous-total de celle-ci, puis sera le grand total. Vous remarquerez peut-être que les sous-totaux de chaque catégorie apparaissent souvent à côté des lignes de catégorie correspondantes. En effet, l'opérateur ROLLUP est conçu pour fournir une sortie intuitive et lisible, en plaçant les sous-totaux à proximité des données qu'ils résument.

ENSEMBLES DE GROUPEMENT

Nous utilisons l'opérateur GROUPING SETS pour regrouper les groupements en fonction des arguments que nous mettons dans son groupe similaire, mais la différence est que nous pouvons mettre autant de groupes à l'intérieur de celui-ci que comme
GROUP BY GROUPING SET ((pays, sexe), (pays), (sexe)) Nous pouvons regrouper les données en combinaison de pays et de sexe dans le premier argument et dans le deuxième argument, nous voulons également les regrouper par pays uniquement et donc dans le troisième argument.

C'est comme si nous combinions 3 groupes en 1 requête qui est la première (pays, sexe), puis la seconde (pays), puis la troisième (sexe). donc si vous souhaitez obtenir le même résultat sans utiliser les ensembles de regroupement, vous avez besoin de 3 requêtes pour cela.

Passons à l'exemple de ce regroupement d'ensembles pour que nous puissions le comprendre.

SELECT 
    country, 
    gender,
    COUNT(*) AS rental_count
FROM 
    rentals
GROUP BY 
    GROUPING SETS (country, gender, ());

Alors le résultat serait

| country  | gender  | rental_count |
|----------|---------|--------------|
| NULL     | NULL    | 8            |  <-- Grand total
| NULL     | Male    | 3            |  <-- Subtotal for Male across all countries
| NULL     | Female  | 5            |  <-- Subtotal for Female across all countries
| USA      | NULL    | 3            |  <-- Subtotal for USA across all genders
| USA      | Male    | 2            |
| USA      | Female  | 1            |
| UK       | NULL    | 3            |  <-- Subtotal for UK across all genders
| UK       | Male    | 1            |
| UK       | Female  | 2            |

Donc, l'explication ici est chaque combinaison unique de pays, et le sexe est indiqué dans le tableau, alors vous vous demandez pourquoi il y a () alors c'est une parenthèse vide, ce qui signifie qu'elle totalisera tout le décompte dans le sortie, mais si nous supprimons cela, seul le sous-total de chaque catégorie sera affiché.

Vous vous demandez pourquoi le CUBE et les GROUPING SETS ont une similitude, alors vous avez raison, mais le cube obtient toutes les combinaisons possibles, mais les ensembles de regroupement permettent d'en regrouper autant que nous le souhaitons dans une seule requête.

Je connais les gars, c'est beaucoup à apprendre, mais si vous continuez à l'utiliser dans votre requête au fil du temps, vous comprendrez chacun de cela. Merci beaucoup :)

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn