程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> MYSQL數據庫 >> MySQL綜合教程 >> mysql GROUP BY 函數 教程

mysql GROUP BY 函數 教程

編輯:MySQL綜合教程

GROUP BY(聚合)函數 本章論述了用於一組數值操作的 group (集合)函數。除非另作說明, group 函數會忽略 NULL 值。 假如你在一個不包含 ROUP BY子句的語句中使用一個 group函數 ,它相當於對所有行進行分組。

GROUP BY(聚合)函數
本章論述了用於一組數值操作的 group (集合)函數。除非另作說明, group 函數會忽略 NULL 值。

假如你在一個不包含 ROUP BY子句的語句中使用一個 group函數 ,它相當於對所有行進行分組。

AVG([DISTINCT] expr)
返回expr 的平均值。 DISTINCT 選項可用於返回 expr的不同值的平均值。

若找不到匹配的行,則AVG()返回 NULL 。

mysql> SELECT student_name, AVG(test_score)

    ->        FROM student

    ->        GROUP BY student_name;

BIT_AND(expr) www.111cn.cn
返回expr中所有比特的 bitwise AND 。計算執行的精確度為64比特(BIGINT) 。

若找不到匹配的行,則這個函數返回 18446744073709551615 。(這是無符號 BIGINT 值,所有比特被設置為 1)。

BIT_OR(expr)
返回expr 中所有比特的bitwise OR。計算執行的精確度為64比特(BIGINT) 。

若找不到匹配的行,則函數返回 0 。

BIT_XOR(expr)
返回expr 中所有比特的bitwise XOR。計算執行的精確度為64比特(BIGINT) 。

若找不到匹配的行,則函數返回 0 。

COUNT(expr)
返回SELECT語句檢索到的行中非NULL值的數目。  

若找不到匹配的行,則COUNT() 返回 0 。

mysql> SELECT student.student_name,COUNT(*)

    ->        FROM student,course

    ->        WHERE student.student_id=course.student_id

    ->        GROUP BY student_name;

 

COUNT(*) 的稍微不同之處在於,它返回檢索行的數目, 不論其是否包含 NULL值。

SELECT 從一個表中檢索,而不檢索其它的列,並且沒有 WHERE子句時, COUNT(*)被優化到最快的返回速度。例如:

mysql> SELECT COUNT(*) FROM student;

這個優化僅適用於 MyISAM表, 原因是這些表類型會儲存一個函數返回記錄的精確數量,而且非常容易訪問。對於事務型的存儲引擎(InnoDB, BDB), 存儲一個精確行數的問題比較多,原因是可能會發生多重事物處理, 而每個都可能會對行數產生影響。

COUNT(DISTINCT expr,[expr...])
返回不同的非NULL值數目。

若找不到匹配的項,則COUNT(DISTINCT)返回 0 。

mysql> SELECT COUNT(DISTINCT results) FROM student;

在MySQL中, 你通過給定一個表達式列表而獲取不包含NULL 不同表達式組合的數目。在標准 SQL中,你將必須在COUNT(DISTINCT ...)中連接所有表達式。

GROUP_CONCAT(expr)
該函數返回帶有來自一個組的連接的非NULL值的字符串結果。其完整的語法如下所示: 

GROUP_CONCAT([DISTINCT] expr [,expr ...]

             [ORDER BY {unsigned_integer | col_name | expr}

                 [ASC | DESC] [,col_name ...]]

             [SEPARATOR str_val])

mysql> SELECT student_name,

    ->     GROUP_CONCAT(test_score)

    ->     FROM student

    ->     GROUP BY student_name;

Or:

mysql> SELECT student_name,

    ->     GROUP_CONCAT(DISTINCT test_score

    ->               ORDER BY test_score DESC SEPARATOR ' ')

    ->     FROM student

    ->     GROUP BY student_name;

在MySQL中,你可以獲取表達式組合的連接值。你可以使用DISTINCT刪去重復值。假若你希望多結果值進行排序,則應該使用  ORDER BY子句。若要按相反順序排列,將 DESC (遞減) 關鍵詞添加到你要用ORDER BY 子句進行排序的列名稱中。默認順序為升序;可使用ASC將其明確指定。   SEPARATOR 後面跟隨應該被插入結果的值中間的字符串值。默認為逗號 (‘,’)。通過指定SEPARATOR '' ,你可以刪除所有分隔符。

使用group_concat_max_len系統變量,你可以設置允許的最大長度。  程序中進行這項操作的語法如下,其中 val 是一個無符號整數:

SET [SESSION | GLOBAL] group_concat_max_len = val;

若已經設置了最大長度, 則結果被截至這個最大長度。

MIN([DISTINCT] expr), MAX([DISTINCT] expr)
返回expr 的最小值和最大值。 MIN() 和 MAX() 的取值可以是一個字符串參數;在這些情況下, 它們返回最小或最大字符串值。請參見7.4.5節,“MySQL如何使用索引”。  DISTINCT關鍵詞可以被用來查找expr 的不同值的最小或最大值,然而,這產生的結果與省略DISTINCT 的結果相同。

若找不到匹配的行,MIN()和MAX()返回 NULL 。

mysql> SELECT student_name, MIN(test_score), MAX(test_score)

    ->        FROM student

    ->        GROUP BY student_name;

對於MIN()、 MAX()和其它集合函數, MySQL當前按照它們的字符串值而非字符串在集合中的相關位置比較 ENUM和 SET 列。這同ORDER BY比較二者的方式有所不同。這一點應該在MySQL的未來版本中得到改善。 

STD(expr) STDDEV(expr)
返回expr 的總體標准偏差。這是標准 SQL 的延伸。這個函數的STDDEV() 形式用來提供和Oracle 的兼容性。可使用標准SQL函數 STDDEV_POP() 進行代替。

若找不到匹配的行,則這些函數返回 NULL 。

STDDEV_POP(expr)
返回expr 的總體標准偏差(VAR_POP()的平方根)。你也可以使用  STD() 或STDDEV(), 它們具有相同的意義,然而不是標准的 SQL。

若找不到匹配的行,則STDDEV_POP()返回 NULL。

STDDEV_SAMP(expr)
返回expr 的樣本標准差 ( VAR_SAMP()的平方根)。

若找不到匹配的行,則STDDEV_SAMP() 返回 NULL 。

SUM([DISTINCT] expr)
返回expr 的總數。 若返回集合中無任何行,則 SUM() 返回NULL。DISTINCT 關鍵詞可用於 MySQL 5.1 中,求得expr 不同值的總和。

若找不到匹配的行,則SUM()返回 NULL。

VAR_POP(expr)
返回expr 總體標准方差。它將行視為總體,而不是一個樣本, 所以它將行數作為分母。你也可以使用 VARIANCE(),它具有相同的意義然而不是 標准的 SQL。

若找不到匹配的項,則VAR_POP()返回NULL。

VAR_SAMP(expr)
返回expr 的樣本方差。更確切的說,分母的數字是行數減去1。  

若找不到匹配的行,則VAR_SAMP()返回NULL。

VARIANCE(expr)
返回expr 的總體標准方差。這是標准SQL 的延伸。可使用標准SQL 函數 VAR_POP() 進行代替。

若找不到匹配的項,則VARIANCE()返回NULL。

 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved