在数据分析和商业智能领域,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中文网其他相关文章!