![](/img/trans.png)
[英]What is the difference between 'GROUP BY' and 'ORDER BY' in SQL?
[英]what is the difference between GROUP BY and ORDER BY in sql
你一般什么時候使用哪個? 非常鼓勵示例!
我指的是 MySql,但無法想象這個概念在另一個 DBMS 上會有所不同
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
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 列表中使用適當的聚合函數(如 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 |
+---------+-------------+
ORDER BY 更改項目返回的順序。
GROUP BY 將按指定的列聚合記錄,這允許您對非分組列(例如 SUM、COUNT、AVG 等)執行聚合功能。
區別正是顧名思義:group by 執行分組操作,而 order by 排序。
如果您執行SELECT * FROM Customers ORDER BY Name
那么您將獲得按客戶姓名排序的結果列表。
如果您執行SELECT IsActive, COUNT(*) FROM Customers GROUP BY IsActive
您將獲得活躍和非活躍客戶的計數。 group by 根據您指定的字段聚合結果。
很簡單, ORDER BY
對數據進行GROUP 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 用於對 select 語句產生的行進行排序。
ORDER BY
按升序或降序顯示字段。 雖然GROUP BY
僅在一個輸出中顯示相同的字段名、id 等。
應該注意的是GROUP BY
並不總是必要的,因為(至少在 PostgreSQL 中,並且可能在其他 SQL 變體中)您可以將ORDER BY
與列表一起使用,並且您仍然可以每列使用ASC
或DESC
...
SELECT name_first, name_last, dob
FROM those_guys
ORDER BY name_last ASC, name_first ASC, dob DESC;
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.