1. 程式人生 > >## sql必知必會學習記錄(九)- 彙總資料

## sql必知必會學習記錄(九)- 彙總資料

sql必知必會學習記錄(九)- 彙總資料

  1. 聚集函式

我們經常需要彙總資料而不用把它們實際檢索出來,為此MySQL提供了專門的函式。使用這些函式,MySQL查詢可用於檢索資料,以便分析和報表生成。這種型別的檢索例子有以下幾種。

  • 確定表中行數(或者滿足某個條件或包含某個特定值的行數)。
  • 獲得表中行組的和。
  • 找出表列(或所有行或某些特定的行)的最大值、最小值和平均值


AVG()函式

SELECT AVG(prod_price) as avg_price from products;
SELECT AVG(prod_price) as avg_price from products where vend_id='DLL01'

AVG()函式忽略列值為NULL的行。


COUNT()函式

COUNT()函式進行計數。可利用COUNT()確定表中行的數目或符合特定條件的行的數目。

  • 使用COUNT(*)對錶中行的數目進行計數,不管表列中包含的是空值(NULL)還是非空值。

  • 使用COUNT(column)對特定列中具有值的行進行計數,忽略NULL值。

SELECT COUNT(*) as num_cust from customers;
SELECT COUNT(cust_email) as num_cust from customers;

NULL值 如果指定列名,則指定列的值為空的行被COUNT()函式忽略,但如果COUNT()函式中用的是星號(*),則不忽略。


Max()函式

MAX()返回指定列中的最大值。MAX()要求指定列名。

SELECT MAX(prod_price) as max_price from products

對非數值資料使用MAX(): 雖然MAX()一般用來找出最大的數值或日期值,但MySQL允許將它用來返回任意列中的最大值,包括返回文字列中的最大值。在用於文字資料時,如果資料按相應的列排序,則MAX()返回最後一行。AX()函式忽略列值為NULL的行。


Min()函式

MIN()的功能正好與MAX()功能相反,它返回指定列的最小值。與MAX()一樣,MIN()要求指定列名。

SELECT MIN(prod_price) as min_price from products;

對非數值資料使用MIN(): MIN()函式與MAX()函式類似,MySQL允許將它用來返回任意列中的最小值,包括返回文字列中的最小值。在用於文字資料時,如果資料按相應的列排序,則MIN()返回最前面的行。MIN()函式忽略列值為NULL的行。


sum()函式

SUM()用來返回指定列值的和(總計)。

SELECT sum(quantity) as items_ordered from orderitems where order_num = 20005

SUM()也可以用來合計計算值。

SELECT sum(item_price*quantity) as total_price from orderitems where order_num = 20005

SUM()函式忽略列值為NULL的行。

  1. 聚集不同值
    常用的聚集函式都可以如下使用:
  • 對所有的行執行計算,指定ALL引數或不給引數(因為ALL是預設行為);
  • 只包含不同的值,指定DISTINCT引數
    如果指定列名,則DISTINCT只能用於COUNT()。DISTINCT不能用於COUNT(*),因此不允許使用COUNT(DISTINCT),否則會產生錯誤。類似地,DISTINCT必須使用列名,不能用
    於計算或表示式。
select AVG(DISTINCT prod_price) as avg_price from products where vend_id = 'DLL01'
  1. 組合聚集函式
SELECT COUNT(*) as num_items, Min(prod_price) as price_min, MAX(prod_price) AS price_max,AVG(prod_price) as price_avg from products;