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 |