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