SQL进行排序、分组、统计的10个新技巧

SQL进行排序、分组、统计的10个新技巧,第1张

SQL进行排序、分组、统计的10个新技巧,第2张

以有意义的方式组织数据可能是一个挑战。有时你需要的可能是一个简单的排序,但通常你需要做更多。你需要分组进行分析和统计。幸运的是,SQL提供了大量的语句和操作来排序、分组和汇总。以下提示将帮助您确定何时排序、何时分组、何时计数以及如何计数。有关每个语句和操作的详细信息,请查阅联机丛书。

1.使用排序使数据有序

通常,所有数据真正需要的是某种顺序。SQL的ORDER BY语句可以按字母或数字顺序组织数据。因此,相似的值按组排列在一起。但是,这种分组中排序的结果并不是真正的分组。Order显示每条记录,而grouping可能代表多条记录。

2.分组以删除重复值

排序和分组的区别在于,排序的数据显示所有记录(在有限的标准范围内),而分组的数据不显示所有记录。Group语句只显示同一值的一条记录。例如,以下语句中的GROUP BY语句只返回数据源中重复数据的zip编码列。

SELECT from customers GROUP BY zip

仅包括由GROUP BY和SELECT语句定义的那些记录。换句话说,选择列表必须满足group by列表,但有一个例外,即选择列表可以包含聚合函数(GROUP BY语句中不允许使用聚合函数)。请注意,GROUP BY语句不对结果组进行排序。为了按字母顺序或数字顺序排列这些组,您需要添加一个ORDER BY语句。此外,不能在GROUP BY语句中引用带有别名的字段。分组列必须是潜在数据,但不需要显示在结果中。

3.分组前的数据筛选。

您可以添加WHERE语句来筛选组中的数据。例如,以下语句只返回肯塔基州客户的邮政编码列。

从customers where state = ' KY ' GROUP BY ZIP中选择ZIP

必须注意,在对GROUP BY语句求值之前,WHERE语句已被筛选。与GROUP BY语句一样,WHERE语句不支持聚合函数。

4.返回所有组。

当您使用WHERE语句筛选数据时,只有您指定的那些记录才会显示在结果分组中,而符合分组定义但不符合筛选条件的数据不会包含在某个分组中。当你想包含包中的所有数据时,只需添加关键字ALL,然后WHERE条件就不起作用了。例如,在前面的示例中添加关键字ALL将返回所有ZIP包,而不仅仅是肯塔基州的ZIP包。

从customerswhere state = ' KY ' GROUP BY ALL ZIP中选择ZIP

这两种说法好像是冲突的,你可能不会这样使用关键字ALL。使用聚合函数计算列时,使用ALL关键字可能会更方便。例如,以下语句计算每个肯塔基州邮政编码的客户数量,并显示其他邮政编码值。

SELECT ZIP,Count(ZIP)AS KYCustomersByZIP FROM
customerswhere state = ' KY ' GROUP BY ALL ZIP

结果包括潜在数据中的所有邮政编码值,但是,对于那些不是肯塔基州邮政编码数据包的聚合列(kycustomersbyZIP ),将显示0。远程查询不支持GROUP BY ALL。

5.分组后筛选数据。

WHERE语句在GROUP BY语句之前计算。当分组后需要筛选数据时,可以使用HAVING语句。通常情况下,WHERE语句和HAVING语句的返回结果是相同的,但值得注意的是,这两个语句是不可互换的。当你感到困惑的时候,可以按照以下说明:使用WHERE语句过滤记录,使用HAVING语句过滤数据包。

通常,您将使用HAVING语句和聚合函数来计算分组。例如,下面的语句返回一个ZIP编码的列,但它可能不包含潜在数据源中的所有ZIP。

SELECT ZIP,Count(ZIP)AS Customers BY ZIP FROM
Customers GROUP BY ZIP,Count(ZIP) = 1

只有那些包含一个客户的组才会显示在结果中。

6.了解有关WHERE和HAVING语句的更多信息

如果您仍然不清楚何时使用WHERE以及何时使用HAVING,请遵循以下说明:

WHERE语句位于GROUP BY语句之前;SQL在分组前评估WHERE语句。

HAVING语句跟在GROUP BY语句后面;SQL在分组后计算HAVING语句。


7。使用聚合函数计算数据包数据。

对数据进行分组可以帮助我们分析数据,但有时我们可能需要比分组更多的信息。您可以使用聚合函数对分组数据进行计数。例如,以下语句显示每批采购订单的总价。

从OrderID的Orders GROUP中选择OrderID,Sum(Cost * Quantity)作为OrderTotal

对于其他分组,选择和分组依据列必须匹配。当SELECT语句包含聚合函数时,此规则是一个例外。

8.统计汇总数据

您可以继续统计数据,并显示每个组的分类统计数据。SQL的ROLLUP操作符可以显示每个分组的附加分类统计信息。此分类统计是使用聚合函数计算每个组中所有记录的结果。以下语句计算每个组的OrderTotal:

从Orders GROUP BY Customer,OrderNumber WITH ROLLUP中选择Customer,OrderNumber,Sum(Cost * Quantity)作为OrderTotal

ROLLUP为具有两个OrderTotal值(分别为20和25)的组显示order total值45。汇总结果中的第一条记录为“是”,因为它计算所有分组记录,并且该值是整个记录集的总值。

ROLLUP不支持聚合函数中的DISTINCT或GROUP BY ALL语句。

9.统计每一列。

CUBE运算符比ROLLUP更进一步,它返回每个分组中重复值的数量。其结果与ROLLUP相同,但是多维数据集的每一列都包含每个客户的额外记录。以下语句显示每个组的统计信息和每个客户的附加统计信息。

从Orders GROUP BY Customer,
OrderNumber WITH CUBE中选择Customer,OrderNumber,Sum(Cost * Quantity)作为OrderTotal

CUBE可以给出最全面的统计数据。它不仅执行聚合和汇总功能,还计算定义分组的其他列。换句话说,CUBE计算所有可能的列组合。

多维数据集不支持GROUP BY ALL语句。

10.对统计结果进行排序。

当多维数据集的结果令人困惑时(通常如此),您可以添加一个分组函数,如下所示:

从Orders GROUP
BY Customer,OrderNumber WITH CUBE
中选择GROUPING(Customer),OrderNumber,Sum(Cost * Quantity)作为OrderTotal

结果中的每一行都包含两个附加值:

值为1表示左边的值是统计值,是ROLLUP或CUBE的运算符。

值为0表示左边的值是由原始GROUP BY语句生成的详细记录。

位律师回复
DABAN RP主题是一个优秀的主题,极致后台体验,无插件,集成会员系统
白度搜_经验知识百科全书 » SQL进行排序、分组、统计的10个新技巧

0条评论

发表评论

提供最优质的资源集合

立即查看 了解详情