简单分组和顺序之间的差异
对于正在学习SQL的人来说,最容易被卡住的地方之一是在学习命令的时候。 和是我们用来组织数据的两个重要关键字。 和之间的区别在于,前者比后者更简单,通常在SQL课程的早期介绍。
有时,人们对这两个概念感到很困惑 ),这种混淆背后的原因是对这两个概念缺乏理解。 虽然它们都被用来根据它们的值来排列数据,但是它们的用例彼此之间有很大的不同。 如果我们正确地学习这两个概念,困惑将自然消失。
在这篇文章中,我使用了这里发布的一个有趣的数据库。 该数据集包含美国使用的2000多种工艺啤酒和500家啤酒厂。 数据包含在CSV文件中,您可以使用图形用户界面工具轻松地将其导入到任何数据库中。 我的一个同事在Vertabelo学院的调查数据中展示了如何做到这一点。
You may also enjoy:
How SQL DISTINCT and ORDER BY Are Related
您还可以享受: SQL DISTINCT和ORDER BY是如何关联的
此数据集中有两个表:和。
让我们看看表中的样本数据集,以便更好地了解它。
我们的第一个话题是。
在试图理解和之间的区别之前,让我们看看这个命令是如何工作的。 让我们从表中的每条记录中找出姓名、城市和州。
当您执行上述命令时,您将得到如下内容: 你可以看到这些结果不是按照它们的名字排序的。 语句的默认顺序是非确定性的,这意味着每次运行代码时,结果的顺序可能会不同。
然而,非确定性的顺序通常不是我们想要的。
例如,假设您希望按列的升序或降序对结果进行排序;在这种情况下,您需要命令。 你所要做的就是这样使用从句: 同样,您也可以按状态的降序获得结果。
您可以看到按状态降序排列的记录。 命令的默认顺序是升序。
因此,如果您没有使用或,结果将按升序排列。
您可以在两列或更多列中使用。 检查以下查询: 该查询首先按州的升序排序,然后按城市的降序排序。 有趣的是,不知道如何使用的人可以用它来分析数据。
例如,假设你想知道在给定的时间里有多少家啤酒厂。 你能做的就是得到他们所在州的排序结果。 这将会给你一个很好的分组结果,从中你可以手动计算给定的啤酒厂的数量。
因此,不太了解的人可能会认为这是对相同数据进行分组的好方法。 那个想法没有错。 如果你想以一种良好的分组方式显示数据,这是一个很好的选择。
不是一种分组显示数据的方式,而是一种分组分析数据的方式。 为了进一步理解SQL和
,让我们更详细地看一下。
在大多数文本中,被定义为按指定的列聚合记录的一种方式,它允许您对非分组的列(如、、等)执行聚合功能。
换句话说,子句的目的是总结列值的唯一组合。
几个例子将进一步阐明: 让我们根据列来分组表格。 上面的SQL查询将生成以下输出
让我们看看这里发生了什么。 该查询从每个值返回一个结果。 这意味着SQL首先用相同的值组成组,并返回代表该组的一行。 它的确切用途是什么? 当然,您可以使用来查找不同的值。
但是SQL有一个专门的关键字。
当您将它与聚合函数(如)一起使用时,可以看出的真正重要性。 为了更好地理解它,请执行以下SQL查询:
它将产生以下结果: 这里,SQL首先根据列对结果进行分组。 然后,它检查每个组中有多少个名称,并返回每个样式的值和名称计数。 如果你仔细观察,你可能会注意到结果已经按升序排列了。
这种情况偶尔会让人们相信会有不同的结果。
实际上,不能保证会以升序显示结果。 如果您需要特定顺序的结果,您必须自己完成,如下所示:
-
因此,可以很好地配合。 所以,现在你知道如何使用计数属于某个组的一组值。 我将再给你两个真实世界的例子来理解。 设想一个雇员表,在其中存储关于雇员的信息,例如他们的姓名、工作角色和工资。
-
每个员工都属于不同的部门,如财务、信息技术或运输。 现在,假设您想根据员工所在的部门获得支付给他们的工资总额。 您需要执行一个如下所示的SQL命令:
假设你有一个销售几种产品类型的电子商务网站。 在您的数据库中,您有一个表来存储有关股票的信息。 如果要查找每种产品类型的计数,可以使用“分组依据和计数汇总”功能:
让我们把这一课学得更深入一点,增加你对……的了解。 您也可以使用两列对结果进行分组。
例如,让我们根据和对表进行分组。 这个查询将进一步使用。 当您执行它时,您将获得以下结果: 在本文中,我解释了和之间的区别。数据库增量同步
基于列的数据对数据进行排序。 当然,作为排序的结果,来自相同值的数据将作为一个组放在一起,这将使您以后手动分析变得容易。 而是分析类似数据的SQL方式。
没有聚合函数就没有真正的用途。 有时,可以按排序的顺序返回结果,但你不应该依赖它。 返回结果的顺序是不确定的,取决于数据库引擎如何执行查询。
读完这篇文章,你应该能够更加自信地使用。
如果你想提高你对SQL和