• SQL每日一练(牛客新题库)——第5天:高级查询


    1. 查找GPA最高值

    题目:运营想要知道复旦大学学生gpa最高值是多少,请你取出相应数据
    在这里插入图片描述

    建表语句

    drop table if exists user_profile;
    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);
    INSERT INTO user_profile VALUES(1,2234,'male',21,'北京大学',3.2);
    INSERT INTO user_profile VALUES(2,2235,'male',null,'复旦大学',3.8);
    INSERT INTO user_profile VALUES(3,2236,'female',20,'复旦大学',3.5);
    INSERT INTO user_profile VALUES(4,2237,'female',23,'浙江大学',3.3);
    INSERT INTO user_profile VALUES(5,2238,'male',25,'复旦大学',3.1);
    INSERT INTO user_profile VALUES(6,2239,'male',25,'北京大学',3.6);
    INSERT INTO user_profile VALUES(7,2240,'male',null,'清华大学',3.3);
    INSERT INTO user_profile VALUES(8,2241,'female',null,'北京大学',3.7);
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16

    解题答案

    #使用聚合函数取最大值
    
    select max(gpa)
    from user_profile
    where university = '复旦大学'
    
    或者
    
    #通过gpa倒叙,然后取第一条
    
    select gpa
    from user_profile
    where university = '复旦大学'
    order by gpa DESC
    limit 1
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16

    在这里插入图片描述

    2. 计算男生人数以及平均GPA

    题目:现在运营想要看一下男性用户有多少人以及他们的平均gpa是多少,用以辅助设计相关活动,请你取出相应数据。
    在这里插入图片描述

    建表语句

    drop table if exists user_profile;
    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);
    INSERT INTO user_profile VALUES(1,2138,'male',21,'北京大学',3.4);
    INSERT INTO user_profile VALUES(2,3214,'male',null,'复旦大学',4.0);
    INSERT INTO user_profile VALUES(3,6543,'female',20,'北京大学',3.2);
    INSERT INTO user_profile VALUES(4,2315,'female',23,'浙江大学',3.6);
    INSERT INTO user_profile VALUES(5,5432,'male',25,'山东大学',3.8);
    INSERT INTO user_profile VALUES(6,2131,'male',28,'北京师范大学',3.3);
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14

    解题答案

    select
      count(gender)  male_num,
      round(avg(gpa),1)  avg_gpa
    from user_profile GROUP BY gender having gender ='male'
    
    • 1
    • 2
    • 3
    • 4

    在这里插入图片描述

    3. 分组计算练习题

    题目:现在运营想要对每个学校不同性别的用户活跃情况和发帖数量进行分析,请分别计算出每个学校每种性别的用户数、30天内平均活跃天数和平均发帖数量。

    在这里插入图片描述

    建表语句

    drop table if exists user_profile;
    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` float,
    `question_cnt` float,
    `answer_cnt` float
    );
    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);
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19

    解题答案

    SELECT gender,university,count(gender) as user_num,
    avg(active_days_within_30) as avg_active_days,avg(question_cnt) as avg_question_cnt
    from user_profile
    GROUP by university,gender; 
    
    • 1
    • 2
    • 3
    • 4

    在这里插入图片描述

    4. 分组过滤练习题

    题目:现在运营想查看每个学校用户的平均发贴和回帖情况,寻找低活跃度学校进行重点运营,请取出平均发贴数低于5的学校或平均回帖数小于20的学校。
    在这里插入图片描述

    建表语句

    drop table if exists user_profile;
    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` float,
    `answer_cnt` float
    );
    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);
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19

    解题答案

    SELECT
        university,
        avg(  question_cnt  )  AS  avg_question_cnt,
        avg(  answer_cnt  )  AS  avg_answer_cnt  
    FROM
        user_profile  GROUP BY university  
    HAVING
        avg_question_cnt  <  5  OR  avg_answer_cnt  <  20
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    在这里插入图片描述

    5. 如何让刷题变得更高效?

    最近很多学了基础的小伙伴问我该怎么提升编程水平?学了基础该上哪刷题?明明学了很多,做项目却不知道怎么上手,其实这就是练得太少,只注重了学,却忽视了刷题,只有不断练习才能提高和巩固编程思维和能力!
    在这里插入图片描述
    链接地址牛客网 | SQL刷题篇,废话少说速度上号!!!

  • 相关阅读:
    独立站如何做好社媒营销
    金仓数据库KingbaseES客户端编程接口指南-Nodejs(3. Nodejs驱动使用说明)
    【附源码】Python计算机毕业设计某服装店购物网站
    自定义注解实现token拦截放行
    【Maven】maven安装、IDEA创建maven的web项目、添加依赖、集成Tomcat
    【PMSM】二. 经典电流环、速度环设计(下)
    金融科技开题资源汇总
    代码命名规范
    从 Windows 切换到 Mac,这些不能错过的 Tips
    【0基础学Java第二课】数据类型与变量
  • 原文地址:https://blog.csdn.net/yuan2019035055/article/details/126130467