实例演示:
(1)查询表users中的数据。
select u.id,u.realname,U.SEX from users u;
查询结果如下
ID REALNAME SEX
1 10082 松XX
2 10084 林XX 1
3 10087 西XX
4 10100 胡XX
5 10102 龙XX 1
......
(2)上表结果中的"sex"是用代码表示的,希望将代码用中文表示。可在语句中使用CASE语句。
select u.id,u.realname,U.SEX, ( case u.sex when 1 then '男' when 2 then '女' else '空的' END ) 性别 from users u; |
查询结果
ID REALNAME SEX 性别
1 10082 松XX 空的
2 10084 林XX 1 男
3 10087 西XX 空的
4 10100 胡XX 空的
5 10102 龙XX 1 男
......
如果不希望列表中出现"sex"列,语句如下
select u.id,u.realname, ( case u.sex when 1 then '男' when 2 then '女' else '空的' END ) 性别 from users u; |
(3)将sum与case结合使用,可以实现分段统计。
例如现在我希望将上表中各种性别的人数进行统计,sql语句如下
select sum( case u.sex when 1 then 1 else 0 end) 男性, sum( case u.sex when 2 then 1 else 0 end) 女性, sum( case when u.sex<>1 and u.sex<>2 then 1 else 0 end) 性别为空 from users u; |
执行结果如下
男性 女性 性别为空
1 41 15 0
如果学校内有数千名学生进行了考试,想统计60分以下、60-80分、80-100分的总人数,就可以使用这样的语句来实现。只是条件不同而已。
(4)如果sum、case when结合group by使用,可以进行分组分段统计。
如,我希望统计users表中每个创建者创建的男性、女性、无性别的用户总数(数据表中有一个字段creator_id,表示创建者的ID),语句如下
select u.creator_id 创建者ID, sum( case u.sex when 1 then 1 else 0 end) 男性, sum( case u.sex when 2 then 1 else 0 end) 女性, sum( case when u.sex<>1 and u.sex<>2 then 1 else 0 end) 性别为空 from users u group by u.creator_id; |
查询结果如下
创建者ID 男性 女性 性别为空
1 0 0 0
2 10000 35 12 0
3 11100 0 0 0
4 11060 0 0 0
5 11040 0 0 0
6 11080 2 0 0
7 10281 3 3 0
8 10580 1 0 0
上例中只有一个分组字段,实现了1级统计;如果有多个分组字段,应该可以实现多级统计了。如有居民统计表,保存了人口信息、人口所在市、区、街道信息等,欲统计深圳市的人口数据,实现统计如下统计结果的话,就可以通过多级分组实现。
区划 男性居民 女性居民
深圳市
南山区
粤海
科技
宝安区
新安
(5)case when的语法
CASE |
相关推荐
它们通常与GROUP BY语句一起使用,对分组后的数据进行聚合计算。 #### 集合操作 集合操作可以将多个SELECT查询结果集进行合并、求交集和差集等。具体操作包括: 1. **UNION和UNION ALL** - UNION操作用于合并两个...
SELECT SUM(CASE WHEN fsalary > 9999 AND fage > 35 THEN 1 ELSE 0 END), SUM(CASE WHEN fsalary > 9999 AND fage ), SUM(CASE WHEN fsalary < 9999 AND fage > 35 THEN 1 ELSE 0 END), SUM(CASE WHEN fsalary ...
- `GROUP BY`: 用于分组查询,常与聚合函数一起使用。 - `JOIN`: 实现表之间的连接操作,如INNER JOIN, LEFT JOIN, RIGHT JOIN等。 7. **递归和游标**: - `CONNECT BY`: 用于创建层次查询,处理树状结构数据。 ...
在SQL Server 2000中,我们可以使用CASE WHEN语句和MAX聚合函数来实现行转列操作。下面是一个示例代码: ```sql select 姓名 as 姓名, max(case 课程 when '语文' then 分数 else 0 end) 语文, max(case 课程 ...
1. 使用SQL查询生成报表,通过GROUP BY和聚合函数(如COUNT, SUM, AVG, MAX, MIN)来统计和分析数据。 2. 创建自定义视图(VIRTUAL TABLE),简化复杂查询,提高数据访问效率。 3. 使用Oracle的报告服务(如Oracle ...
sum(case when month='1' then amount end) as 一月, sum(case when month='2' then amount end) as 二月, sum(case when month='3' then amount end) as 三月 from Tb_Amount group by years order by years ...
- **GROUP BY**: 对结果集按照一个或多个列进行分组。 **1.19 子查询** - **简单子查询**: 在一个查询中嵌套另一个查询。 - **相关子查询**: 外层查询的每行都需要执行内层查询。 **1.20 替换变量** - **&**: ...
- **条件表达式**:如 `CASE WHEN ... THEN ... ELSE ... END` 用于条件判断。 ##### 1.8 使用子函数产生的总计 - **聚合函数**:如 `SUM(column_name)`、`COUNT(*)`、`AVG(column_name)` 等。 ##### 1.9 子查询 -...
- `GROUP BY` 和 `HAVING`:用于分组数据和在分组后进行过滤。 6. **其他函数**: - `L trim()`, `R trim()`, `Trim()`: 去除字符串的前导或尾随空格。 - `LENGTH()`: 返回字符串的长度。 - `CHR()`: 通过ASCII...
- **GROUP BY子句**:对查询结果分组。 - **HAVING子句**:对GROUP BY的结果进一步过滤。 - **子句的综合应用**:结合以上子句实现复杂查询。 #### 第六天:表的联合 - **介绍**:联合多个表的数据。 - **在一个...
- **GROUP BY子句**:讲解了如何使用GROUP BY子句对数据进行分组。 - **HAVING子句**:阐述了HAVING子句在分组查询中的作用。 - **子句的综合应用**:通过实例演示了多个子句结合使用的场景。 #### 第六天:表的...
它可以与聚合函数如SUM、COUNT、AVG、MAX、MIN结合使用,还可以利用CASE WHEN进行复杂的条件判断。例如,创建表student、subjects和stu_grade的示例: ```sql CREATE TABLE student ( stu_id NUMBER(10) PRIMARY ...