搜索
写经验 领红包
 > 娱乐

casewhe聚合函数(sql中case语句用法举例说明)

导语:「SQL」CASE语句和聚合函数搭配使用

SQL语言里的CASE语句功能十分强大,与其他条件判断语句和聚合函数组合在一起时,可实现复杂的数据查询和分析功能。之前给大家介绍过CASE语句的基本用法(可参看:「SQL」CASE多条件分支语句的基本使用)。今天主要给大家介绍一些CASE语句和聚合函数搭配使用的例子(文章中所举例子可能并不是最优查询方案,目的主要是给大家演示一些语句的用法)。

下面的例子基于一张程序员表(programmer),该表的表结构和数据如下图所示:

聚合函数里使用CASE语句

当想统计每种编程语言下,程序员各自的男女人数,比如想得到下面的结果:

要达到上面的目的,可以在按照擅长语言进行分组的情况下,使用CASE语句来根据性别进行处理,然后用聚合函数SUM来进行数量的求和,实现的SQL如下图所示:

CASE语句里使用聚合函数

当我们想确定一批加班人员,每种语言抽一名,原则是优先选择男程序员进行加班,规则主要如下:

1、如果该语言下都是同性别的程序员,那就选第一个

2、如果该语言下有不同性别的程序员,优先选择男程序员,有多个男程序员时选择第一个

达到上面的目的,可以根据语言进行分组,然后判断性别数量,当性别数量大于1时,说明存在两种性别的程序员,两种性别的情况下,通过CASE语句对女程序员进行排除(利用聚合函数忽略NULL值的特性),最终的SQL如下图所示:

查询出的结果如下图所示:

GROUP BY条件下使用CASE语句

当我们想按照前后端语言类型来统计其下的程序员数量,比如:Java、C++、Python归类于后端语言,Html归类于前端语言,那所有Java、C++、Python下的程序员数量都需要计算到后端语言下,到达的效果如下所示:

因为最终输出的分类数据(前后端语言),在原始表里不存在,要达到上面的目的,可以在GROUP BY语句下使用CASE语句来重新定义分类,然后按照新定义的分类来统计数量,具体的实现SQL如下所示:

如果是在PostgreSQL和MySQL里,上面的SQL可以简写为下面的样子(GROUP BY下用到了SELECT里的别名,其他数据库不支持,因为正常情况下,GROUP BY会优先于SELECT语句执行):

相关阅读:

「Notepad++」格式化SQL

「SQL」CASE多条件分支语句的基本使用

------ The End ------

本文内容由小畅整理编辑!