MySQL學習記錄--分組與聚集

來源:互聯網
上載者:User

標籤:條件   count   技術分享   select   mysql學習   man   alt   mysq   mysql5.5   

一、group by 子句

  group by 字句可對資料進行分組。

  以MySQL5.5的sakila資料庫中的film資料表舉例:尋找出各個電影等級的電影總數

mysql>SELECT rating, COUNT(*) AS ratingCount FROM film     > GROUP BY rating 

  結果如下:

  可以看出,group by 子句對其後接的欄位進行了分組,而這裡也用了聚集合函式count()對各分組中的項目數進行統計。

 

二、聚集合函式

  由上例可以知道,聚集合函式是對某個分組的所有行執行特定的操作。下面介紹一些通用的聚集合函式:

    MAX() : 返回集合中的最大值

    MIN() :返回集合中的最小值

    AVG() : 返回集合中的平均值

    SUM() : 返回集合所有值之和

    COUNT() : 返回集合的總條數

  還是以film 資料表舉例:註:length欄位在資料表中代表電影時間長度

mysql> select max(length),    -> min(length),    -> avg(length),    -> sum(length),    -> count(*)    -> from film;

  結果以下

 

  聚集合函式可以建立參數運算式,可以根據需要任意增加複雜度,只需要保證最後返回一個數字、字串或日期即可。

 

三、聚集合函式對null值的處理

  sum()、avg()、max()函數都會忽略分組集合中的null值。需要注意,count(欄位)是對分組集合中的個數統計,會忽略null,而count(*)表示統計分組集合的行數,不會忽略null。

 

四、having 子句

  先看例子:尋找出各個電影等級的電影總數且總數大於200

mysql> SELECT rating, COUNT(*) AS ratingCount FROM film    -> GROUP BY rating    -> WHERE ratingCount>200;

ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that    -- 報錯
corresponds to your MySQL server version for the right syntax to use near ‘WHERE
ratingCount>200‘ at line 3

  查詢的where 子句中不能包含聚集合函式,這是因為where 子句是在分組前執行的,伺服器此時還不能對分組執行任何函數。因此,可用having 子句使用聚集合函式進行過濾資料

mysql> select rating, count(*) as ratingCount from film    -> group by rating    -> having ratingCount>200;+--------+-------------+| rating | ratingCount |+--------+-------------+| PG-13  |         223 || NC-17  |         210 |+--------+-------------+2 rows in set (0.00 sec)

 

五、分組查詢中的where 和 having

  當在包含group by子句的查詢中增加過濾條件時,需要考慮過濾是針對未經處理資料(此時過濾條件應放在where 子句中),還是針對分組後的資料(此時過濾條件應放到having 子句中)。

MySQL學習記錄--分組與聚集

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.