sql和GROUP BY和ORDER BY有什么不同?

你什么时候使用一般? 例如,非常鼓励!

我指的是如此MySql,但不能想象在另一个DBMS上的概念是不同的

ORDER BY更改项目返回的顺序。

GROUP BY将根据指定的列汇总logging,使您可以在非分组列(例如SUM,COUNT,AVG等)上执行聚合函数。

ORDER BY更改项目返回的顺序。

GROUP BY将根据指定的列汇总logging,使您可以在非分组列(例如SUM,COUNT,AVG等)上执行聚合函数。

TABLE: ID NAME 1 Peter 2 John 3 Greg 4 Peter SELECT * FROM TABLE ORDER BY NAME = 3 Greg 2 John 1 Peter 4 Peter SELECT Count(ID), NAME FROM TABLE GROUP BY NAME = 1 Greg 1 John 2 Peter SELECT NAME FROM TABLE GROUP BY NAME HAVING Count(ID) > 1 = Peter 

ORDER BY:按升序或降序对数据进行sorting。

考虑一下CUSTOMERS表:

 +----+----------+-----+-----------+----------+ | ID | NAME | AGE | ADDRESS | SALARY | +----+----------+-----+-----------+----------+ | 1 | Ramesh | 32 | Ahmedabad | 2000.00 | | 2 | Khilan | 25 | Delhi | 1500.00 | | 3 | kaushik | 23 | Kota | 2000.00 | | 4 | Chaitali | 25 | Mumbai | 6500.00 | | 5 | Hardik | 27 | Bhopal | 8500.00 | | 6 | Komal | 22 | MP | 4500.00 | | 7 | Muffy | 24 | Indore | 10000.00 | +----+----------+-----+-----------+----------+ 

以下是一个例子,它将按照NAME的升序对结果进行sorting:

 SQL> SELECT * FROM CUSTOMERS ORDER BY NAME; 

这将产生以下结果:

 +----+----------+-----+-----------+----------+ | ID | NAME | AGE | ADDRESS | SALARY | +----+----------+-----+-----------+----------+ | 4 | Chaitali | 25 | Mumbai | 6500.00 | | 5 | Hardik | 27 | Bhopal | 8500.00 | | 3 | kaushik | 23 | Kota | 2000.00 | | 2 | Khilan | 25 | Delhi | 1500.00 | | 6 | Komal | 22 | MP | 4500.00 | | 7 | Muffy | 24 | Indore | 10000.00 | | 1 | Ramesh | 32 | Ahmedabad | 2000.00 | +----+----------+-----+-----------+----------+ 

GROUP BY:将相同的数据分组。

现在, CUSTOMERS表具有以下重复名称的logging:

 +----+----------+-----+-----------+----------+ | ID | NAME | AGE | ADDRESS | SALARY | +----+----------+-----+-----------+----------+ | 1 | Ramesh | 32 | Ahmedabad | 2000.00 | | 2 | Ramesh | 25 | Delhi | 1500.00 | | 3 | kaushik | 23 | Kota | 2000.00 | | 4 | kaushik | 25 | Mumbai | 6500.00 | | 5 | Hardik | 27 | Bhopal | 8500.00 | | 6 | Komal | 22 | MP | 4500.00 | | 7 | Muffy | 24 | Indore | 10000.00 | +----+----------+-----+-----------+----------+ 

如果要将相同的名称分组为单个名称,则GROUP BY查询将如下所示:

 SQL> SELECT * FROM CUSTOMERS GROUP BY NAME; 

这将产生以下结果:(对于相同的名称,它会select最后一个,最后按升序对列进行sorting)

  +----+----------+-----+-----------+----------+ | ID | NAME | AGE | ADDRESS | SALARY | +----+----------+-----+-----------+----------+ | 5 | Hardik | 27 | Bhopal | 8500.00 | | 4 | kaushik | 25 | Mumbai | 6500.00 | | 6 | Komal | 22 | MP | 4500.00 | | 7 | Muffy | 24 | Indore | 10000.00 | | 2 | Ramesh | 25 | Delhi | 1500.00 | +----+----------+-----+-----------+----------+ 

因为你已经推断,没有像sum,avg等SQL函数是没有用的。

所以通过这个定义来理解GROUP BY的正确使用:

GROUP BY子句对查询返回的行进行处理,方法是将相同的行汇总到单个/ distinct组中,并使用SELECT列表中适当的Aggregate函数(如COUNT(),SUM (),MIN(),MAX(),AVG()等

现在,如果您想知道每个客户(名称)的工资总额,那么GROUP BY查询将如下所示:

 SQL> SELECT NAME, SUM(SALARY) FROM CUSTOMERS GROUP BY NAME; 

这将产生以下结果:(相同名称的薪水总和,删除相同的名称后sortingNAME列)

 +---------+-------------+ | NAME | SUM(SALARY) | +---------+-------------+ | Hardik | 8500.00 | | kaushik | 8500.00 | | Komal | 4500.00 | | Muffy | 10000.00 | | Ramesh | 3500.00 | +---------+-------------+ 

区别正是名字所暗示的:一个组通过执行分组操作,并按顺序sorting。

如果您执行SELECT * FROM Customers ORDER BY Name那么您将得到按客户名称sorting的结果列表。

如果您执行SELECT IsActive, COUNT(*) FROM Customers GROUP BY IsActive则会计入活动和非活动客户的数量。 该组通过根据您指定的字段汇总结果。

他们有完全不同的含义,根本就没有关系。

ORDER BY允许您根据不同的标准对结果集进行sorting,例如先按来自az的名称进行sorting,然后按照从最高到最低的价格进行sorting。

(ORDER BY名称,价格DESC)

GROUP BY允许您获取结果集,将其分组为逻辑组,然后在这些组上运行聚合查询。 例如,您可以select所有员工,按工作地点分组,并计算每个工作场所所有员工的平均工资。

很简单, ORDER BY命令数据和GROUP BY组,或组合数据。

ORDER BY按照提到的字段对结果集进行sorting,缺省情况下按升序排列。

假设你用ORDER BY (student_roll_number)激发了一个查询,它会显示你的结果是学生的卷号的升序。 这里, student_roll_number项可能会多次出现。

GROUP BY情况下,我们使用这个集合函数,并根据集合函数对数据进行分组,并得到结果。 在这里,如果我们的查询与GROUP BY (student_first_name) SUM (marks)一起有SUM (marks) ,它将显示属于每个组的学生的标记总和(组中的所有成员将具有相同的名字)。

GROUP BY用于对select中的行进行分组,通常在聚合行时(例如,对于某些字段的相同值的一组行,计算总计,平均值等)。

ORDER BY用于对select语句产生的行进行sorting。

那里有一些很好的例子 就像从webcheatsheet添加我自己的,它提供了很好的清晰的例子,以及让你执行自己的SQL。

SQLsorting依据

SQL组By

ORDER BY以升序或降序显示字段。 虽然GROUP BY只在一个输出中显示相同的字段名称,ID等。

  1. GROUP BY将根据指定的列聚合logging,这允许您在非分组列(例如SUM,COUNT,AVG等)上执行聚合函数。 ORDER BY更改项目返回的顺序。
  2. 如果您执行SELECT IsActive,COUNT(*)FROM Customers GROUP BY IsActive,则会计入活动和非活动客户的数量。 该组通过根据您指定的字段汇总结果。 如果您执行SELECT * FROM Customers ORDER BY Name,那么您将得到按客户名称sorting的结果列表。
  3. 如果你是GROUP,结果不一定是sorting的; 尽pipe在很多情况下它们可能会以一种直观的顺序出现,但GROUP条款并不能保证这一点。 如果您希望您的组sorting,请务必在GROUP BY之后使用明确的ORDER BY。
  4. 分组数据不能被WHERE子句过滤。 订单数据可以通过WHERE子句过滤。

应该指出, GROUP BY并不总是必要的(至less在PostgreSQL中,可能在其他SQL变体中),您可以使用ORDER BY和列表, 并且仍然可以使用列的ASCDESC

 SELECT name_first, name_last, dob FROM those_guys ORDER BY name_last ASC, name_first ASC, dob DESC;