天天看點

SQL資料處理函數Aggregate 函數CASE 函數

SQL資料處理

  • Aggregate 函數
    • 常用aggregate函數:
      • COUNT()函數的應用
  • CASE 函數
    • 簡單CASE函數
    • CASE條件表達函數
    • CASE函數的其他經典用法

Aggregate 函數

SQL Aggregate 函數計算從列中取得的值,傳回一個單一的值。

常用aggregate函數:

函數 描述
AVG() 傳回平均值
COUNT() 傳回行數
MAX() 傳回最大值
MIN() 傳回最小值
SUM() 傳回總和

COUNT()函數的應用

SQL COUNT(*) 文法

//傳回表中的記錄數
SELECT COUNT(*) FROM table_name;
           

SQL COUNT(column_name) 文法

//傳回指定列的值的數目(NULL 不計入)
SELECT COUNT(column_name) FROM table_name;

//執行個體:傳回countries表中國家的數目
SELECT COUNT(name) AS total_country FROM countries
           

SQL COUNT(DISTINCT column_name) 文法

//傳回指定列的不同值的數目
SELECT COUNT(DISTINCT column_name) FROM table_name;

//執行個體:傳回countries表中continent的數目
SELECT COUNT(DISTINCT region) FROM countries 
           

CASE 函數

計算條件清單,并傳回多個可能的結果表達式之一。可以在sql中對字段進行簡單的處理。嚴格的意義上來講case函數已經試流程控制語句了,不是簡單意義上的函數,不過為了友善,很多人将case函數稱為流程控制函數。

用法詳解

簡單CASE函數

簡單CASE函數文法

CASE  <col_name>
   WHEN <value1> THEN <result1>
   WHEN <value2> THEN <result2>
   ...
   ELSE <result>
END 
           

執行個體

SELECT name AS student,
(CASE WHEN score='A' THEN '優'
    WHEN score='B' THEN '良'
    WHEN score='C' THEN '及格'
    ELSE '不及格' END) AS remark
)
FROM student_score
           

輸出結果為:

student remark
小紅
小明
小白 不及格
小黑
小黃 及格

CASE條件表達函數

CASE條件表達函數文法

CASE
    WHEN <條件1> THEN <結果1>
    WHEN <條件2> THEN <結果2>
    ...
    ELSE <結果>
END 
           

執行個體:

SELECT name AS student,
(CASE WHEN score>=90 THEN '優'
    WHEN score>=80 THEN '良'
    WHEN score='C'>=60 THEN '及格'
    ELSE '不及格' END) AS remark
)
FROM student_score
           

CASE函數的其他經典用法

執行個體1

統計A班中男女同學的人數,以及男女同學的及格人數

SELECT
SUM(CASE WHEN stu_sex='男' THEN 1 ELSE 0 END) AS MALE
SUM(CASE WHEN stu_sex='女' THEN 1 ELSE 0 END) AS FEMALE
SUM(CASE WHEN stu_sex='男' AND score >= 60 THEN 1 ELSE 0 END) AS MALE_PASS
SUM(CASE WHEN stu_sex='女' AND score >=60 THEN 1 ELSE 0 END) AS FEMALE_PASS
           

輸出結果:

MALE FEMALE MALE_PASS FEMALE_PASS
27 25 24 23

執行個體2

統計各個城市的水耗、電耗、熱耗

表中city清單示城市,type表示耗能類型(type=0,1,2),value表示耗能量

city value type
北京 28.50
北京 23.51 1
北京 28.12 2
北京 12.30
北京 15.46 1
上海 18.88
上海 16.66 1
上海 19.99
上海 10.05
SELECT city,
SUM( CASE WHEN type=0 THEN value ELSE 0 END) AS WATER_ENERGY
SUM( CASE WHEN type=1 THEN value ELSE 0 END) AS ELE_ENERGY
SUM( CASE WHEN type=2 THEN value ELSE 0 END) AS HEAT_ENERGY
FROM ENERGY_COST
ORDER BY city
           

輸出結果為

city WATER_ENERGY ELE_ENERGY HEAT_ENERGY
北京 40.80 38.97 28.12
上海 48.92 16.66