首页 > 试题广场 >

查看不同年龄段的用户明细

[编程题]查看不同年龄段的用户明细
  • 热度指数:316969 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 256M,其他语言512M
  • 算法知识视频讲解
题目:现在运营想要将用户划分为20岁以下,20-24岁,25岁及以上三个年龄段,分别查看不同年龄段用户的明细情况,请取出相应数据。(注:年龄为空请返回其他



示例:user_profile
id device_id gender age university gpa active_days_within_30
question_cnt
answer_cnt
1 2138 male 21 北京大学 3.4 7 2 12
2 3214 male 复旦大学 4 15 5 25
3 6543 female 20 北京大学 3.2 12 3 30
4 2315 female 23 浙江大学 3.6 5 1 2
5 5432 male 25 山东大学 3.8 20 15 70
6 2131 male 28 山东大学 3.3 15 7 13
7 4321 male 26 复旦大学 3.6 9 6 52

根据示例,你的查询应返回以下结果:
device_id gender age_cut
2138 male 20-24岁
3214
male 其他
6543 female 20-24岁
2315
female 20-24岁
5432
male
25岁及以上
2131
male
25岁及以上
4321 male
25岁及以上

示例1

输入

drop table if exists `user_profile`;
drop table if  exists `question_practice_detail`;
CREATE TABLE `user_profile` (
`id` int NOT NULL,
`device_id` int NOT NULL,
`gender` varchar(14) NOT NULL,
`age` int ,
`university` varchar(32) NOT NULL,
`gpa` float,
`active_days_within_30` int ,
`question_cnt` int ,
`answer_cnt` int 
);
CREATE TABLE `question_practice_detail` (
`id` int NOT NULL,
`device_id` int NOT NULL,
`question_id`int NOT NULL,
`result` varchar(32) NOT NULL
);
CREATE TABLE `question_detail` (
`id` int NOT NULL,
`question_id`int NOT NULL,
`difficult_level` varchar(32) NOT NULL
);

INSERT INTO user_profile VALUES(1,2138,'male',21,'北京大学',3.4,7,2,12);
INSERT INTO user_profile VALUES(2,3214,'male',null,'复旦大学',4.0,15,5,25);
INSERT INTO user_profile VALUES(3,6543,'female',20,'北京大学',3.2,12,3,30);
INSERT INTO user_profile VALUES(4,2315,'female',23,'浙江大学',3.6,5,1,2);
INSERT INTO user_profile VALUES(5,5432,'male',25,'山东大学',3.8,20,15,70);
INSERT INTO user_profile VALUES(6,2131,'male',28,'山东大学',3.3,15,7,13);
INSERT INTO user_profile VALUES(7,4321,'male',28,'复旦大学',3.6,9,6,52);
INSERT INTO question_practice_detail VALUES(1,2138,111,'wrong');
INSERT INTO question_practice_detail VALUES(2,3214,112,'wrong');
INSERT INTO question_practice_detail VALUES(3,3214,113,'wrong');
INSERT INTO question_practice_detail VALUES(4,6543,111,'right');
INSERT INTO question_practice_detail VALUES(5,2315,115,'right');
INSERT INTO question_practice_detail VALUES(6,2315,116,'right');
INSERT INTO question_practice_detail VALUES(7,2315,117,'wrong');
INSERT INTO question_practice_detail VALUES(8,5432,117,'wrong');
INSERT INTO question_practice_detail VALUES(9,5432,112,'wrong');
INSERT INTO question_practice_detail VALUES(10,2131,113,'right');
INSERT INTO question_practice_detail VALUES(11,5432,113,'wrong');
INSERT INTO question_practice_detail VALUES(12,2315,115,'right');
INSERT INTO question_practice_detail VALUES(13,2315,116,'right');
INSERT INTO question_practice_detail VALUES(14,2315,117,'wrong');
INSERT INTO question_practice_detail VALUES(15,5432,117,'wrong');
INSERT INTO question_practice_detail VALUES(16,5432,112,'wrong');
INSERT INTO question_practice_detail VALUES(17,2131,113,'right');
INSERT INTO question_practice_detail VALUES(18,5432,113,'wrong');
INSERT INTO question_practice_detail VALUES(19,2315,117,'wrong');
INSERT INTO question_practice_detail VALUES(20,5432,117,'wrong');
INSERT INTO question_practice_detail VALUES(21,5432,112,'wrong');
INSERT INTO question_practice_detail VALUES(22,2131,113,'right');
INSERT INTO question_practice_detail VALUES(23,5432,113,'wrong');
INSERT INTO question_detail VALUES(1,111,'hard');
INSERT INTO question_detail VALUES(2,112,'medium');
INSERT INTO question_detail VALUES(3,113,'easy');
INSERT INTO question_detail VALUES(4,115,'easy');
INSERT INTO question_detail VALUES(5,116,'medium');
INSERT INTO question_detail VALUES(6,117,'easy');

输出

2138|male|20-24岁
3214|male|其他
6543|female|20-24岁
2315|female|20-24岁
5432|male|25岁及以上
2131|male|25岁及以上
4321|male|25岁及以上
这个运营想要得属实有点多
发表于 2022-01-03 15:24:02 回复(38)
select device_id,gender,
case
    when age<20 then '20岁以下'
    when age<25 then '20-24岁'
    when age>=25 then '25岁及以上'
    else '其他'
end age_cut
from user_profile;
利用case when end else来分段查看
题目缺少条件,age为空输出其他


编辑于 2021-12-20 16:59:15 回复(11)
为什么这道题加group by错了,上一道需要加group by呢?求解
发表于 2022-06-20 22:08:22 回复(16)
SELECT device_id,gender,
case
when age>=25 then '25岁及以上'
when age between 20 and 24 then '20-24岁'
when age<24 then '20岁以下'
else '其他'
end
AS age_cut

FROM user_profile
SELECT device_id, gender, 
IF(age>=25,'25岁及以上',
  IF(age BETWEEN 20 AND 24,'20-24岁',
    IF(age<20,'20岁以下','其他')))

FROM user_profile;

两个方法⬆️

发表于 2022-01-24 16:02:25 回复(6)
SELECT device_id, gender, 
IF (age <20, '20岁以下',
    IF(age >=25, '25岁以上', 
      IF(age BETWEEN 20 AND 24, '20-24岁', '其他'))) AS age_cut
FROM user_profile;

发表于 2021-09-26 16:30:03 回复(10)
服了,题目上写25岁及以上,输出结果上写25岁以上。。。。
发表于 2021-09-13 16:05:59 回复(5)
发表于 2021-10-01 20:41:57 回复(0)
SELECT 
device_id,
gender,
case  
      when age >=25 then  "25岁及以上"
      when age between 20and 24 then "20-24岁"
      when age < 20  then  "20岁以下"
      when age is null then  "其他"
      end AS age_cut
from user_profile
哪里错了,求大神指点一下
发表于 2021-12-15 19:29:46 回复(5)
SELECT device_id,gender,'20岁以下' age_cut
FROM user_profile
WHERE age < 20
UNION
SELECT device_id,gender,'20-24岁' age_cut
FROM user_profile
WHERE age between 20 AND 24
UNION
SELECT device_id,gender,'25岁及以上' age_cut
FROM user_profile
WHERE age >=25
UNION
SELECT device_id,gender,'其他' age_cut
FROM user_profile
WHERE age is NULL
请问这样为什么会错呢?
发表于 2022-04-23 19:03:02 回复(8)
Select
device_id,
gender,
CASE
WHEN age <20 THEN '20岁以下'
WHEN age>= 20 and age<=24 THEN '20-24岁'
WHEN age>=25 THEN '25岁及以上'
ELSE '其他'
END as age_cut
From user_profile
发表于 2021-10-18 16:35:00 回复(2)
select device_id, gender, 
       case 
          when age >= 25 then "25岁及以上"
          when age >= 20 then "20-24岁"
          when age < 20 then "20岁以下"
          else "其他" end 
          as age_cut
from user_profile
发表于 2022-04-14 16:58:02 回复(0)
select device_id,gender,
case
    when age<20 then '20岁以下'
    when age<=24 then '20-24岁'
    when age>=25 then '25岁及以上'
    else '其他'
end as age_cut
from user_profile
发表于 2022-02-08 09:50:10 回复(0)
select device_id,gender,
case 
    when age<20 then "20岁以下"
    when age between 20 and 24 then "20-24岁"
    when age>=25 then "25岁以上"
    else "其他"
end age_cut
from user_profile
发表于 2021-10-18 09:49:00 回复(4)
select device_id,gender,
(case 
    when age between 20 and 24 then '20-24岁'
    when age>=25 then '25岁以上'
    else '其他'
    end) as age_cut
from user_profile
答案25岁以上包含了25岁

发表于 2021-10-05 14:45:29 回复(6)
本题使用case或者if都可以解决  以下我是使用的if来解决的 
select device_id,gender,if(age<20,'20岁以下',if(age>=20 and age<=24,'20-24岁',if(age>=25,'25岁及以上','其他')))
from user_profile
发表于 2022-07-09 17:07:27 回复(2)

【场景】:多个条件

【分类】:条件函数、if嵌套

分析思路

难点:

1.如何根据条件输出内容

一个条件2个结果可以使用if、case when;多个条件多个结果可以使用case when,还有if嵌套

(1)分别查看这两个年龄段用户数量

[使用]:if()或者case when;group by

扩展

前往查看:MySQL 条件函数 case when、if、ifnull

求解代码

方法一:

条件函数:if()

select
    device_id,
    gender, 
    if(age <20, '20岁以下',
        if(age >=25, '25岁及以上', 
            if(age between 20 and 24, '20-24岁', '其他'))) as age_cut
from user_profile

方法二

条件函数:case when

select
    device_id,
    gender,
    (case
        when age < 20  then '20岁以下'
        when age >= 20 and age <= 24 then '20-24岁'
        when age >= 25 then '25岁及以上'
        else '其他'
    end) as age_cut
from user_profile
发表于 2022-12-20 18:23:56 回复(0)
select device_id,gender,
case when age >=25 then "25岁及以上" 
     when age >=20 and age < 25 then "20-24岁"
     when age <20 then "20岁以下"
     else "其他" end as age_cut
from user_profile

标准的CASE WHEN 用法
比上一题简单

发表于 2022-07-14 20:58:03 回复(0)
select device_id, gender,
case when age<20 then '20岁以下'
when age<25 and age>=20 then '20-24岁'
when age>=25 then '25岁及以上'
else '其他' end as age_cut
from user_profile

发表于 2022-04-24 14:07:53 回复(0)
运算符case……where 条件 then ……else ……end as……
SELECT device_id,gender,
CASE 
 WHEN age>=25 THEN '25岁以上'
 WHEN age>=20 and age<=24 then '20-24岁'
 when age<20 then '20岁以下'
 else '其他'
 end as age_cut
 FROM user_profile;
发表于 2021-08-29 17:34:44 回复(1)
第一种,利用case when……then……else end函数
select device_id,gender,
case  when age<20 then '20岁以下'
    when age<25 then '20-24岁'
    when 25<=age then '25岁及以上'
    ELSE '其他'
end age_cut
from user_profile
第二种用if函数的嵌套
SELECT device_id, gender, 
IF(age>=25,'25岁及以上',
  IF(20<=age<25,'20-24岁',
    IF(age<20,'20岁以下','其他'))) 
    as age_cut
FROM user_profile;

发表于 2024-09-19 16:37:54 回复(0)

问题信息

SQL
难度:
491条回答 3320浏览

热门推荐

通过挑战的用户

查看代码
查看不同年龄段的用户明细