mysql數(shù)據(jù)分組:創(chuàng)建分組

mysql數(shù)據(jù)分組

SQL聚集函數(shù)可用來匯總數(shù)據(jù)。這使我們能夠對行進行計數(shù),計算和與平均數(shù),獲得最大和最小值而不用檢索所有數(shù)據(jù)。

目前為止的所有計算都是在表的所有數(shù)據(jù)或匹配特定的where子句的數(shù)據(jù)上進行的。提示一下,下面的例子返回供應商1003提供的產(chǎn)品數(shù)目:

輸入:

select?count(*)?as?mun_prods?from?products?where?vend_id?=?1003;

輸出:

mysql數(shù)據(jù)分組:創(chuàng)建分組

但如果要返回每個供應商提供的產(chǎn)品數(shù)目怎么辦?或者返回只提供單項產(chǎn)品的供應商所提供的產(chǎn)品,或返回提供10個以上產(chǎn)品的供應商怎么辦?

這就是分組顯身手的時候了。分組允許把數(shù)據(jù)分為多個邏輯,以便能對每個組進行聚集計算。

mysql創(chuàng)建分組

分組是在select語句的group by子句中建立的。理解分組最好的辦法是看下面這個例子:

輸入:

select?vend_id,count(*)?as?num_prods?from?products?group?by?vend_id;

輸出:

mysql數(shù)據(jù)分組:創(chuàng)建分組

分析:上面的select語句指定了兩個列,vend_id包含產(chǎn)品供應商的ID,num_prods為計算字段(用count(*)函數(shù)建立)。group by 子句知識MySQL按vend_id排序并分組數(shù)據(jù)。這導致對每個vend_id而不是整個表計算num_prods一次。從輸出中可以看到,供應商1001有3個產(chǎn)品,供應商1002有2個產(chǎn)品,供應商1003有7個產(chǎn)品,而供應商1005有2個產(chǎn)品。

因為使用了group by,就不必指定要計算和估值的每個組了。系統(tǒng)會自動完成。group by子句提示MySQL分組數(shù)據(jù),然后對每個組而不是整個結果集進行聚集。

在使用group by子句之前,需要知道一些重要的規(guī)定:

1.group by子句可以包含任意數(shù)目的列。這使得能對分組進行嵌套,為數(shù)據(jù)分組提供更細致的控制。

2.如果在group by子句中嵌套了分組,數(shù)據(jù)將在最后規(guī)定的分組上進行匯總。換句話說,在建立分組時,指定的所有列都一起計算(所以不能從個別的列取回數(shù)據(jù))。

3.group by子句中列出的每個列都必須是檢索列或有效的表達式(但不能是聚集函數(shù))。如果在select中使用表達式,則必須在group by子句中指定相同的表達式。不能使用別名。

4.除聚集計算語句外,select語句中的每個列都必須在group by子句中給出。

5.如果分組列中具有NULL值,則NULL將作為一個分組返回。如果列中有多行NULL值,它們將分為一組。

6.group by子句必須出現(xiàn)在where子句之后,order by子句之前。

【相關推薦】

  1. mysql數(shù)據(jù)分組:過濾分組

  2. mysql數(shù)據(jù)分組:過濾分組

? 版權聲明
THE END
喜歡就支持一下吧
點贊8 分享