首页 >数据库 >mysql教程 >OLAP:多维数据集、汇总和分组集

OLAP:多维数据集、汇总和分组集

WBOY
WBOY原创
2024-07-16 15:16:421071浏览

OLAP: CUBE, ROLLUP, AND GROUPING SETS

在数据分析和商业智能领域,OLAP(在线分析处理)是一项基石技术,可促进对海量数据集的多维分析。 OLAP 使用户能够通过多个维度分析数据来获得洞察,从而提供业务指标和绩效的全面视图。

现在我们将讨论 OLAP 的三个关键特性,即 CUBE、ROLLUP 和 GROUPING SETS 运算符。这将在以各种方式汇总和聚合数据方面发挥关键作用。

我们先讨论第一个:

立方体

多维数据集是OLAP中的一个强大工具,它可以生成维度及其聚合的所有可能组合。它通过计算每个维度组合的小计和总计,提供全面的多维数据视图,使用户能够从不同的角度和粒度级别探索数据。

好吧,这首先有点技术性,但当我们在查询中使用它时,您肯定会理解它。

假设我们想知道在一个国家/地区租房的每个人的数量以及他们的性别。

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

所以输出将是这样的

| 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

看到每一行代表“国家”和“性别”的独特组合。这就是 CUBE 的用途,它将根据您聚合的内容生成所有可能的组合。我们有每个类别的小计和总计。


汇总

ROLLUP 运算符用于生成分层汇总数据。它计算预定义维度层次结构的小计,通常从最详细的粒度级别移动到最不详细的粒度级别。它为层次结构的每个级别生成小计,生成一个结果集,其中包括指定列的每个组合的小计以及总计。它就像更多的组织然后让我们再举一个例子。

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

那么输出将是这样的

| 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            |

您会在每个类别的计数之后看到它的组织,它将打印该类别的小计,然后接下来将是总计。您可能会注意到,每个类别的小计通常显示在相应类别行的旁边。这是因为 ROLLUP 运算符旨在提供直观且可读的输出,将小计放在它们汇总的数据附近。

分组集

我们使用 GROUPING SETS 运算符根据我们放入相似分组中的参数对分组进行分组,但不同之处在于我们可以在其中放入尽可能多的组,例如
GROUP BY GROUPING SET ((国家、性别)、(国家)、(性别)) 我们可以在第一个参数中将数据分组为国家和性别的组合,在第二个参数中我们也希望仅将其分组为国家,因此第三个参数。

这就像我们在 1 个查询中组合 3 个组,第一个是(国家/地区,性别),然后第二个是(国家/地区),然后第三个是(性别)。因此,如果您想在不使用分组集的情况下获得相同的结果,则需要 3 个查询。

让我们继续看这个分组集的示例,以便我们能够理解它。

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

那么输出将是

| 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            |

因此,这里的解释是表中显示的国家/地区和性别的每个独特组合,然后您想知道为什么有 () 那么这是一个空括号,意味着它将总计中的所有计数输出,但如果我们删除它,它将仅显示每个类别的小计。

您想知道为什么多维数据集和分组集具有相似性,那么您是对的,但是多维数据集获得了所有可能的组合,但分组集是我们可以在一个查询中对任意数量的分组进行分组。

我知道有很多东西需要学习,但是如果您在查询中不断使用它,您就会理解其中的每一个。非常感谢:)

以上是OLAP:多维数据集、汇总和分组集的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn