GROUPBY分組查詢(xún)與SQL執(zhí)行順序
來(lái)源:懂視網(wǎng)
責(zé)編:小采
時(shí)間:2020-11-09 13:35:55
GROUPBY分組查詢(xún)與SQL執(zhí)行順序
GROUPBY分組查詢(xún)與SQL執(zhí)行順序:在SQL中使用GROUP BY來(lái)對(duì)SELECT的結(jié)果進(jìn)行數(shù)據(jù)分組,在具體使用GROUP BY之前需要知道一些重要的規(guī)定。 GROUP BY子句可以包含任意數(shù)目的列。也就是說(shuō)可以在組里再分組,為數(shù)據(jù)分組提供更細(xì)致的控制。 如果在GROUP BY子句中指定多個(gè)分組,數(shù)據(jù)將在最后指定的分
導(dǎo)讀GROUPBY分組查詢(xún)與SQL執(zhí)行順序:在SQL中使用GROUP BY來(lái)對(duì)SELECT的結(jié)果進(jìn)行數(shù)據(jù)分組,在具體使用GROUP BY之前需要知道一些重要的規(guī)定。 GROUP BY子句可以包含任意數(shù)目的列。也就是說(shuō)可以在組里再分組,為數(shù)據(jù)分組提供更細(xì)致的控制。 如果在GROUP BY子句中指定多個(gè)分組,數(shù)據(jù)將在最后指定的分

在SQL中使用GROUP BY來(lái)對(duì)SELECT的結(jié)果進(jìn)行數(shù)據(jù)分組,在具體使用GROUP BY之前需要知道一些重要的規(guī)定。 GROUP BY子句可以包含任意數(shù)目的列。也就是說(shuō)可以在組里再分組,為數(shù)據(jù)分組提供更細(xì)致的控制。 如果在GROUP BY子句中指定多個(gè)分組,數(shù)據(jù)將在最后指定的分
在SQL中使用GROUP BY來(lái)對(duì)SELECT的結(jié)果進(jìn)行數(shù)據(jù)分組,在具體使用GROUP BY之前需要知道一些重要的規(guī)定。
GROUP BY子句可以包含任意數(shù)目的列。也就是說(shuō)可以在組里再分組,為數(shù)據(jù)分組提供更細(xì)致的控制。
如果在GROUP BY子句中指定多個(gè)分組,數(shù)據(jù)將在最后指定的分組上匯總。
GROUP BY子句中列出的每個(gè)列都必須是檢索列或有效的表達(dá)式(但不能是聚集函數(shù))。如果在SELECT中使用了表達(dá)式,則必須在GROUP BY子句中指定相同的表達(dá)式。不能使用別名。
出了聚集計(jì)算語(yǔ)句外,SELECT語(yǔ)句中的每一列都必須在GROUP BY子句中給出。
如果分組列中有NULL值,則NULL將作為一個(gè)分組返回。如果有多行NULL值,它們將分為一組。
GROUP BY子句必須在WHERE子句之后,ORDER BY之前。
過(guò)濾分組
對(duì)分組過(guò)于采用HAVING子句。HAVING子句支持所有WHERE的操作。HAVING與WHERE的區(qū)別在于WHERE是過(guò)濾行的,而HAVING是用來(lái)過(guò)濾分組。
另一種理解WHERE與HAVING的區(qū)別的方法是,WHERE在分組之前過(guò)濾,而HAVING在分組之后以每組為單位過(guò)濾。
分組與排序
一般在使用GROUP BY子句時(shí),也應(yīng)該使用ORDER BY子句。這是保證數(shù)據(jù)正確排序的唯一方法。
SQL SELECT語(yǔ)句的執(zhí)行順序:
- from子句組裝來(lái)自不同數(shù)據(jù)源的數(shù)據(jù);
- where子句基于指定的條件對(duì)記錄行進(jìn)行篩選;
- group by子句將數(shù)據(jù)劃分為多個(gè)分組;
- 使用聚集函數(shù)進(jìn)行計(jì)算;
- 使用having子句篩選分組;
- 計(jì)算所有的表達(dá)式;
- 使用order by對(duì)結(jié)果集進(jìn)行排序;
- select 集合輸出。
舉個(gè)例子吧。
select 考生姓名, max(總成績(jī)) as max總成績(jī)
from tb_Grade
where 考生姓名 is not null
group by 考生姓名
having max(總成績(jī)) > 600
order by max總成績(jī)
在上面的示例中 SQL 語(yǔ)句的執(zhí)行順序如下:
- 首先執(zhí)行 FROM 子句, 從 tb_Grade 表組裝數(shù)據(jù)源的數(shù)據(jù)
- 執(zhí)行 WHERE 子句, 篩選 tb_Grade 表中所有數(shù)據(jù)不為 NULL 的數(shù)據(jù)
- 執(zhí)行 GROUP BY 子句, 把 tb_Grade 表按 "學(xué)生姓名" 列進(jìn)行分組
- 計(jì)算 max() 聚集函數(shù), 按 "總成績(jī)" 求出總成績(jī)中最大的一些數(shù)值
- 執(zhí)行 HAVING 子句, 篩選課程的總成績(jī)大于 600 分的.
- 執(zhí)行 ORDER BY 子句, 把最后的結(jié)果按 "Max 成績(jī)" 進(jìn)行排序.
聲明:本網(wǎng)頁(yè)內(nèi)容旨在傳播知識(shí),若有侵權(quán)等問(wèn)題請(qǐng)及時(shí)與本網(wǎng)聯(lián)系,我們將在第一時(shí)間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com
GROUPBY分組查詢(xún)與SQL執(zhí)行順序
GROUPBY分組查詢(xún)與SQL執(zhí)行順序:在SQL中使用GROUP BY來(lái)對(duì)SELECT的結(jié)果進(jìn)行數(shù)據(jù)分組,在具體使用GROUP BY之前需要知道一些重要的規(guī)定。 GROUP BY子句可以包含任意數(shù)目的列。也就是說(shuō)可以在組里再分組,為數(shù)據(jù)分組提供更細(xì)致的控制。 如果在GROUP BY子句中指定多個(gè)分組,數(shù)據(jù)將在最后指定的分