創(chuàng)建分組
分組是在select語(yǔ)句的group by字句中建立的。
舉例:select vend_id, count(*) as num_prods from products group by vend_id;
結(jié)果:
\1.PNG
在具體使用group by字句前,需要知道一些重要的規(guī)定。
- group by字句可以包含任意數(shù)目的列。這使得能對(duì)分組進(jìn)行嵌套,為數(shù)據(jù)分組提供更精細(xì)化的控制。
- 如果在group by字句中嵌套了分組,數(shù)據(jù)將在最后規(guī)定的分組上進(jìn)行匯總。
- group by字句中列出的每個(gè)列都必須是檢索列或有效的表達(dá)式(但不能是聚集函數(shù))。如果在select中使用表達(dá)式,則必須在group by字句中指定相同的表達(dá)式。不能使用別名。
- 如果分組列中具有null值,則null將作為一個(gè)分組返回。
- group by字句必須出現(xiàn)在where字句之后,order by字句之前。
過(guò)濾分組
過(guò)濾分組使用having
having和where的差別:where在數(shù)據(jù)分組前進(jìn)行過(guò)濾,having在數(shù)據(jù)分組后進(jìn)行過(guò)濾。
舉例:select vend_id, count(*) as num_prods from products where prod_price >= 10 group by vend_id having count(*) >=2
說(shuō)明:列出具有2個(gè)(含)以上、價(jià)格為10(含)以上產(chǎn)品的供應(yīng)商
\2.PNG
select 字句順序
一下為select 語(yǔ)句中使用必須遵循的次序:
字句 說(shuō)明 是否必須使用
select 要返回的列或表達(dá)式 是
from 從中檢索數(shù)據(jù)的表 僅在從表選擇數(shù)據(jù)時(shí)使用
where 行級(jí)過(guò)濾 否
group by 分組說(shuō)明 僅在按組計(jì)算聚集是使用
having 組級(jí)過(guò)濾 否
order by 輸出排序順序 否
limit 要檢索的行數(shù) 否
參考書籍:
- MySQL必知必會(huì)