veh*_*zzz 114 mysql sql database
你什么时候使用哪种?非常鼓励这些例子!
我指的是MySql,但无法想象这个概念在另一个DBMS上是不同的
Rid*_*Dev 242
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
Run Code Online (Sandbox Code Playgroud)
CMe*_*rat 77
ORDER BY改变了返回项目的顺序.
GROUP BY将按指定的列聚合记录,这允许您在非分组列(例如SUM,COUNT,AVG等)上执行聚合函数.
Jer*_*yal 73
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 |
+----+----------+-----+-----------+----------+
Run Code Online (Sandbox Code Playgroud)
以下是一个示例,它将按NAME的升序对结果进行排序:
SQL> SELECT * FROM CUSTOMERS
ORDER BY NAME;
Run Code Online (Sandbox Code Playgroud)
这将产生以下结果:
+----+----------+-----+-----------+----------+
| 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 |
+----+----------+-----+-----------+----------+
Run Code Online (Sandbox Code Playgroud)
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 |
+----+----------+-----+-----------+----------+
Run Code Online (Sandbox Code Playgroud)
如果要将相同的名称分组为单个名称,则GROUP BY查询将如下所示:
SQL> SELECT * FROM CUSTOMERS
GROUP BY NAME;
Run Code Online (Sandbox Code Playgroud)
这将产生以下结果:(对于相同的名称,它将选择最后一个,最后按升序对列进行排序)
+----+----------+-----+-----------+----------+
| 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 |
+----+----------+-----+-----------+----------+
Run Code Online (Sandbox Code Playgroud)
正如你所推断的那样没有像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;
Run Code Online (Sandbox Code Playgroud)
这将产生以下结果:(相同名称的工资总和,并在删除相同名称后对NAME列进行排序)
+---------+-------------+
| NAME | SUM(SALARY) |
+---------+-------------+
| Hardik | 8500.00 |
| kaushik | 8500.00 |
| Komal | 4500.00 |
| Muffy | 10000.00 |
| Ramesh | 3500.00 |
+---------+-------------+
Run Code Online (Sandbox Code Playgroud)
Max*_*ing 25
区别正是名称所暗示的:一个分组执行分组操作,一个分类排序.
如果这样做,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)显示属于每个组的学生的标记总和(其中组的所有成员将具有相同的名字).
| 归档时间: |
|
| 查看次数: |
258808 次 |
| 最近记录: |