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 | 0 |
北京 | 23.51 | 1 |
北京 | 28.12 | 2 |
北京 | 12.30 | 0 |
北京 | 15.46 | 1 |
上海 | 18.88 | 0 |
上海 | 16.66 | 1 |
上海 | 19.99 | 0 |
上海 | 10.05 | 0 |
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 | 0 |