1. sql語句中分組的作用是什麼
聚合函數:sum-求和
avg-求平均值
max-求最大值
min-求最小值
count-求記錄數
當使用這些函數時,如果不使用group by (分組)這句,則是對整個表做運算。加上分組子句,則在每個組的基礎上運算。
2. SQL 分組數據
連載的上一篇文章,我們講到通過 SQL 聚合函數可以匯總數據,比如對行進行計數,計算和與平均數,獲取最大值和最小值。
但目前為止,我們的匯總都是正對所有行或匹配 WHERE 子句的數據上進行的。比如返回供應商 DLL01 提供的產品數目:
運行結果:
那如果我們想要返回每個供應商提供的產品數目呢?這就需要用到分組聚合了。使用分組可以將數據分為多個邏輯組,然後對每個組進行聚合計算。
分組的創建使用 SELECT 語句中的 GROUP BY 子句,比如下面的 SQL 返回每個供應商提供的產品數目:
運行結果:
上述 SELECT 語句返回兩個列, vend_id 為供應商 ID,是分組欄位; num_prods 為計算欄位,使用 count(*) 聚合而來。 GROUP BY 子句告訴 DBMS 按 vend_id 排序並分組數據,然後對每個分組而不是整個數據集進行聚合。
除了使用 GROUP BY 分組數據外, SQL 還允許過濾分組,規定包含哪些分組,排除哪些分組。比如,我們只想列出供應產品數目在 2 種以上的供應商及其供應產品的數目。
這里有個過濾條件: 供應產品數目大於 2 ,條件中的 供應產品數目 是針對分組後進行聚合產生的計算欄位,因此無法使用 WHERE 子句。 WHERE 子句過濾時指定的是行,而不是分組。
為此, SQL 提供了 HAVING 子句來過濾分組,並且 HAVING 支持所有 WHERE 操作符。下面,我們來完成供應產品數目在 2 種以上的供應商及其供應產品的數目。
運行結果:
跟前面的結果相比,供應產品數目等於 2 的供應商信息就不見啦~
關於 WHERE 子句和 HAVING 子句的區別,我們可以再通過一個案例理解一下。下面的 SQL 檢索具有兩個或以上產品且其價格大於等於 4 的供應商。
其中產品表如下:
SQL 語句如下:
運行結果:
截止目前,我們已經學了不少的 SELECT 子句,下面小魚針對目前我們已經學習的 SELECT 子句來總結一下他們在 SELECT 語句中的先後順序。
表中子句的排列順序即為它們在 SELECT 語句中依次出現的次序:
還是上面的例子,檢索具有兩個或以上產品且其價格大於等於 4 的供應商和其供應的產品數目,不過檢索檢索需要按照產品數目升序排列。
運行結果:
本節,我們學習了使用 GROUP BY 子句對多組數據進行匯總計算,並返回每個分組的結果。並實踐了如何使用 HAVING 子句過濾分組。
3. sql中為什麼要使用分組查詢
分組查詢一般用於統計數據,使用分組能讓匯總結果一目瞭然。
1、如emp表中有如下數據:
4. sql中什麼情況下用分組
你指的應該是「group by」吧?
其實可以這樣理解,舉個例子:
比如,一張「學生成績表」,現在要求你分別求出(注意是「分別」)男生和女生的平均成績(註:指的是「所有男生的平均成績」和「所有女生的平均成績」),此時,你就必須通過「性別」欄位進行分組,然後才可以分別求出男生和女生平均成績!
【個人感覺學習這些語句的時候最好賦予實際的環境中去理解,這樣更清楚也更好理解。希望我的回答對你有所幫助!】
5. SQL語句中,如果有group by 和order by兩個語句,是先分組還是先排序
SQL語句中,如果有group by 和order by兩個語句,是先分組還是先排序?
先進行分組處理。
Group By 和 Having, Where ,Order by這些關鍵字是按照如下順序進行執行的:Where, Group By, Having, Order by。
首先where將最原始記錄中不滿足條件的記錄刪除(所以應該在where語句中盡量的將不符合條件的記錄篩選掉,這樣可以減少分組的次數)
然後通過Group By關鍵字後面指定的分組條件將篩選得到的檢視進行分組
接著系統根據Having關鍵字後面指定的篩選條件,將分組檢視後不滿足條件的記錄篩選掉
最後按照Order By語句對檢視進行排序,這樣最終的結果就產生了。
在這四個關鍵字中,只有在Order By語句中才可以使用最終檢視的列名,如:
SELECT FruitName, ProctPlace, Price, ID AS IDE, Discount
FROM T_TEST_FRUITINFO
WHERE (ProctPlace = N'china')
ORDER BY IDE
這里只有在ORDER BY語句中才可以使用IDE,其他條件語句中如果需要引用列名則只能使用ID,而不能使用IDE。
SQL語句中,有group by 和order by兩個語句,是先分組還是先排序?
肯定是group by先
order by優先順序最低,在最後
group by 語句執行後記錄會按關鍵字自動升序?
不一定,group by只負責分組。
VF 中先排序order by還是先分組 group by
這是需要看題上的要求,要求要分組才分組,要求要排序才排序的,並不是每道題兩個都同時需要
sql語句中 order by 排序原則
ORDER BY這個指令來達到我們的目的。
ORDER BY 的語法如下:
SELECT "欄位名"
FROM "表格名"
[WHERE "條件"]
ORDER BY "欄位名" [ASC, DESC]
[] 代表 WHERE 是一定需要的。不過,如果 WHERE 子句存在的話,它是在 ORDER BY 子句之前。 ASC 代表結果會以由小往大的順序列出,而 DESC 代表結果會以由大往小的順序列出。如果兩者皆沒有被寫出的話,那我們就會用 ASC。
我們可以照好幾個不同的欄位來排順序。在這個情況下, ORDER BY 子句的語法如下(假設有兩個欄位):
ORDER BY "欄位一" [ASC, DESC], "欄位二" [ASC, DESC]
若我們對這兩個欄位都選擇由小往大的話,那這個子句就會造成結果是依據 "欄位一" 由小往大排。若有好幾筆資料 "欄位一" 的值相等,那這幾筆資料就依據 "欄位二" 由小往大排。
select-sql 語句中,篩選用(?)子句,分組用group by 子句,排序用order by 子句
篩選用
where 子句
比如
select * from sutdent where 年齡=20
這就是根據年齡這個條件進行篩選
oracle sql語句中 先執行where還是order by
where 裡面條件 and 是先執行 and 前面 還是後面條件這個其實和你寫的順序不大,這個先後順序,是資料庫來根據表/索引的資訊來決定的。例如一個 學生表, 有學號,姓名,性別其中 學號是主鍵, 姓名上面有個索引。 找 名字叫 強妹 的女生: SELECT * FROM 學生 WHERE 姓名='強妹' AND 性別 = '女' 與 SELECT * FROM 學生 WHERE 性別 = '女' AND 姓名='強妹' 資料庫在處理 SQL 以前,都會去分析, 發現 查詢的條件中, 姓名上面有索引,而性別上面沒有。 那麼優先根據 姓名的條件, 去檢索,然後再去把通過索引得到的資料,去篩選 性別=女的比如表裡面共有10000行。姓名叫 '強妹' 的只有一個。那麼通過索引,一步就定位到那一行。然後再判斷這一行資料的 性別欄位, 是不是 = '女' 假如 姓名/性別 都沒有索引呢?那就是執行 全表掃描。不分先後。什麼意思呢?就是假如 表裡面10000行資料。那就是從第一行開始, 檢視 姓名與性別 條件。 滿足的返回。 不滿足的丟棄。 直到100行都處理完。並不是一口氣把所有的資料,都放到記憶體裡面,然後 姓名判斷一次, 去掉部分, 性別判斷一次,再去掉部分。 藍屏
sql語句中的where語句和order by語句,哪個語句先執行
④SELECT [DISTINCT] * | 列 [別名],列 [別名],……
①FROM 表名稱 [別名],表名稱 [別名],……
②[WHERE 限定條件]
③[GROUP BY 分組欄位,[分組欄位,分組欄位……]]
⑤[ORDER BY 排序列名 [ASC|DESC],排序列名 [ASC|DESC],……]
where先執行:SQL語句執行順序:SELECTFROM--1WHERE--2GROUPBY--3HAVING--4ORDERBY--5
where先執行,然後對篩出來的結果再排序。
如果不先按where查出來的結果再排序,那先排序出來的結果有什麼意義呢。
6. sql語句中啥什麼要用到group bygroup by什麼根據什麼分組的
比如你有一張學生成績表 就這樣:
看到 group by 的用法了吧