Answers:
ORDER BY更改返回项目的顺序。
GROUP BY将按指定的列聚合记录,这使您可以对未分组的列(例如SUM,COUNT,AVG等)执行聚合功能。
ORDER BY更改返回项目的顺序。
GROUP BY将按指定的列聚合记录,这使您可以对未分组的列(例如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
age
列,并且Peters具有不同的年龄并且查询为SELECT NAME,AGE FROM TABLE GROUP BY NAME,该怎么办?
ORDER BY:按升序或降序对数据进行排序。
考虑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的升序对结果进行排序:
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表具有以下重复名称的记录:
+----+----------+-----+-----------+----------+
| 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;
这将产生以下结果:(对于相同的名称,它将选择最后一个,最后以升序对列进行排序)
+----+----------+-----+-----------+----------+
| 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子句通过将相同的行汇总到单个/不同的组中来处理查询返回的行,并通过在SELECT列表中使用适当的Aggregate函数(如COUNT(),SUM)返回包含每个组的摘要的单个行(),MIN(),MAX(),AVG()等。
现在,如果您想知道每个客户(姓名)的工资总额,那么GROUP BY查询将如下所示:
SQL> SELECT NAME, SUM(SALARY) FROM CUSTOMERS
GROUP BY NAME;
这将产生以下结果:(相同名称的薪金总和,并在删除相同名称后对NAME列进行排序)
+---------+-------------+
| NAME | SUM(SALARY) |
+---------+-------------+
| Hardik | 8500.00 |
| kaushik | 8500.00 |
| Komal | 4500.00 |
| Muffy | 10000.00 |
| Ramesh | 3500.00 |
+---------+-------------+
区别恰恰是名称所隐含的含义:group by执行分组操作,order by排序。
如果这样做,SELECT * FROM Customers ORDER BY Name
那么您将获得按客户名称排序的结果列表。
如果您这样做的SELECT IsActive, COUNT(*) FROM Customers GROUP BY IsActive
话,您会得到活跃和不活跃的客户数。分组依据您指定的字段汇总结果。
简单,ORDER BY
对数据和GROUP BY
组进行排序,或组合数据。
ORDER BY
默认情况下,按照提到的字段对结果集进行排序。
假设您将查询激发为ORDER BY (student_roll_number)
,它将显示结果以学生卷数的升序排列。在这里,student_roll_number
输入可能会发生多次。
在GROUP BY
情况下,我们使用这个具有聚合函数,它组数据按聚合函数,我们得到的结果。在这里,如果查询SUM (marks)
同时GROUP BY (student_first_name)
显示,则将显示属于每个组的学生的分数总和(组中所有成员的名字都相同)。
GROUP BY通常用于在选择行时对行进行分组,通常是在聚合行时(例如,为某些字段具有相同值的一组行计算总计,平均值等)。
ORDER BY用于对选择语句产生的行进行排序。
ORDER BY
以升序或降序显示字段。虽然GROUP BY
在一个输出中显示相同的字段名,ID等。