题解 | #计算25岁以上和以下的用户数量#

计算25岁以上和以下的用户数量

https://www.nowcoder.com/practice/30f9f470390a4a8a8dd3b8e1f8c7a9fa

select
    CASE
        when age < 25
        or age is NULL THEN '25岁以下'
        when age >= 25 THEN '25岁及以上'
    end age_cut,
    count(device_id) as number
from
    user_profile
group by
    age_cut

CASE函数

是一种多分支的函数,可以根据条件列表的值返回多个可能的结果表达式中的一个。

可用在任何允许使用表达式的地方,但不能单独作为一个语句执行。

分为:

简单CASE函数

搜索CASE函数

简单 CASE函数

1

2

3

4

5

6

CASE测试表达式

WHEN简单表达式1 THEN结果表达式1

WHEN简单表达式2 THEN结果表达式2 …

WHEN简单表达式n THEN结果表达式n

[ ELSE结果表达式n+1 ]

END

计算测试表达式,按从上到下的书写顺序将测试表达式的值与每个WHEN子句的简单表达式进行比较。

如果某个简单表达式的值与测试表达式的值相等,则返回第一个与之匹配的WHEN子句所对应的结果表达式的值。

如果所有简单表达式的值与测试表达式的值都不相等,

若指定了ELSE子句,则返回ELSE子句中指定的结果表达式的值;

若没有指定ELSE子句,则返回NULL。

例48. 查询班级表中的学生的班号、班名、系号和班主任号,并对系号作如下处理:

当系号为1时,显示 “计算机系”;

当系号为2时,显示 “软件工程系”;

当系号为3时,显示 “物联网系”。

1

2

3

4

5

6

7

SELECT班号 ,班名,

CASE系号

WHEN1 THEN'软件工程系'

WHEN2 THEN'计算机系'

WHEN3 THEN'物联网系'

ENDAS系号,班主任号

FROM班级表

搜索CASE函数

1

2

3

4

5

6

CASE

WHEN布尔表达式1 THEN结果表达式1

WHEN布尔表达式2 THEN结果表达式2 …

WHEN布尔表达式n THEN结果表达式n

[ ELSE结果表达式n+1 ]

END

按从上到下的书写顺序计算每个WHEN子句的布尔表达式。

返回第一个取值为TRUE的布尔表达式所对应的结果表达式的值。

如果没有取值为TRUE的布尔表达式,

则当指定了ELSE子句时,返回ELSE子句中指定的结果;

如果没有指定ELSE子句,则返回NULL。

例48用搜索CASE来做:

1

2

3

4

5

6

7

SELECT班号 ,班名,

CASE

WHEN系号=1 THEN'软件工程系'

WHEN系号=2 THEN'计算机系'

WHEN系号=3 THEN'物联网系'

ENDAS系号,班主任号

FROM班级表

例49.查询“M01F011”号课程的考试情况,列出学号、课程号和成绩,同时将百分制成绩显示为等级。

1

2

3

4

5

6

7

8

9

10

SELECT学号,课程号,

CASE

WHEN成绩 >= 90 THEN'优'

WHEN成绩 BETWEEN80 AND89 THEN'良'

WHEN成绩 BETWEEN70 AND79 THEN'中'

WHEN成绩 BETWEEN60 AND69 THEN'及格'

WHEN成绩 <60 THEN'不及格'

END成绩

FROM成绩表

WHERE课程号 = 'M01F011'

CASE函数(续)

例50.统计每个班男生和女生的数量各是多少,统计结果的表头为,班号,男生数量,女生数量。

1

2

3

4

SELECT班号,

COUNT(CASEWHEN性别=‘男’ THEN‘男’ END) 男生数,

COUNT(CASEWHEN性别=‘女’ THEN‘女’ END) 女生数

FROM学生表 GROUPBY班号

例51.判断成绩的等级,85-100为“优”,70-84为“良”,60-69为“及格”,60以下为“不及格”,并统计每一等级的人数。

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

SELECT

CASE

WHENGRADE BETWEEN85 AND100 THEN'优'

WHENGRADE BETWEEN70 AND84 THEN'良'

WHENGRADE BETWEEN60 AND69 THEN'及格'

ELSE'不及格'

END等级, COUNT(*) 人数

FROMSC

GROUPBY

CASE

WHENGRADE BETWEEN85 AND100 THEN'优'

WHENGRADE BETWEEN70 AND84 THEN'良'

WHENGRADE BETWEEN60 AND69 THEN'及格'

ELSE'不及格'

END

select
    '25岁以下' as age_cut,
    count(device_id) as number
from
    user_profile
where
    age < 25
    or age is NULL
union
select
    '25岁及以上' as age_cut,
    count(device_id) as number
from
    user_profile
where
    age >= 25

select
    if (
        age < 25
        or age is NULL,
        '25岁以下',
        '25岁及以上'
    ) as age_cut,
    count(device_id) as number
from
    user_profile
group by
    age_cut


全部评论

相关推荐

高斯林的信徒:武大简历挂?我勒个骚岗
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务