首页 > 数据库 >mysql牛客网实战练习

mysql牛客网实战练习

时间:2023-03-01 18:24:15浏览次数:40  
标签:实战 cnt university 30 question 牛客 mysql male id

1、模糊查询

字段名 like '匹配内容'

  1. _ :下划线 代表匹配任意一个字符;

  2. % :百分号 代表匹配0个或多个字符;

  3. []: 中括号 代表匹配其中的任意一个字符;

  4. [^]: ^尖冒号 代表 非,取反的意思;不匹配中的任意一个字符。

sql:select device_id,age,university from user_profile where university like '北京%'

2、最大值Max(xx)/order by xx desc limit 1

 

方法一 :select max(gpa) gpa from user_profile WHERE university='复旦大学'

方法二: select gpa from user_profile WHERE university='复旦大学' order by gap desc limit 1

 3、count函数、avg函数

sql:select count(gender) as male_num , round(avg(gpa),1) as avg_gpa from user_profile where gender = 'male'

4、分组计算练习

题目:现在运营想要对每个学校不同性别的用户活跃情况和发帖数量进行分析,请分别计算出每个学校每种性别的用户数、30天内平均活跃天数和平均发帖数量。   用户信息表:user_profile 30天内活跃天数字段(active_days_within_30) 发帖数量字段(question_cnt) 回答数量字段(answer_cnt)
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.0 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
第一行表示:id为1的用户的常用信息为使用的设备id为2138,性别为男,年龄21岁,北京大学,gpa为3.4在过去的30天里面活跃了7天,发帖数量为2,回答数量为12 。。。 最后一行表示:id为7的用户的常用信息为使用的设备id为4321,性别为男,年龄26岁,复旦大学,gpa为3.6在过去的30天里面活跃了9天,发帖数量为6,回答数量为52     你的查询返回结果需要对性别和学校分组,示例如下,结果保留1位小数,1位小数之后的四舍五入:
gender university user_num avg_active_day avg_question_cnt
male 北京大学 1 7.0 2.0
male 复旦大学 2 12.0 5.5
female 北京大学 1 12.0 3.0
female 浙江大学 1 5.0 1.0
male 山东大学 2 17.5 11.0
解释: 第一行表示:北京大学的男性用户个数为1,平均活跃天数为7天,平均发帖量为2 。。。 最后一行表示:山东大学的男性用户个数为2,平均活跃天数为17.5天,平均发帖量为11  sql:

 

select

gender, university, count(device_id) user_rum, avg(active_days_within_30) avg_active_day, avg(question_cnt) avg_question_cnt from user_profile group by gender, university

5、分组过滤

描述

题目:现在运营想查看每个学校用户的平均发贴和回帖情况,寻找低活跃度学校进行重点运营,请取出平均发贴数低于5的学校或平均回帖数小于20的学校。   示例: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.0 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 female 26 复旦大学 3.6 9 6 52
第一行表示:id为1的用户的常用信息为使用的设备id为2138,性别为男,年龄21岁,北京大学,gpa为3.4在过去的30天里面活跃了7天,发帖数量为2,回答数量为12
。。。
最后一行表示:id为7的用户的常用信息为使用的设备id为4321,性别为男,年龄26岁,复旦大学,gpa为3.6在过去的30天里面活跃了9天,发帖数量为6,回答数量为52 根据示例,你的查询应返回以下结果,请你保留3位小数(系统后台也会自动校正),3位之后四舍五入:
university avg_question_cnt avg_answer_cnt
北京大学 2.5000 21.000
浙江大学 1.000 2.000
解释: 平均发贴数低于5的学校或平均回帖数小于20的学校有2个 属于北京大学的用户的平均发帖量为2.500,平均回答数量为21.000 属于浙江大学的用户的平均发帖量为1.000,平均回答数量为2.000  sql:

 

 

select university, round(avg(question_cnt),3) avg_question_cnt, round(avg(answer_cnt),3) avg_answer_cnt from user_profile group by university having avg_question_cnt < 5 or avg_answer_cnt < 20 6、分组排序练习题 题目:现在运营想要查看不同大学的用户平均发帖情况,并期望结果按照平均发帖情况进行升序排列,请你取出相应数据。   示例: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.0 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 female 26 复旦大学 3.6 9 6 52
第一行表示:id为1的用户的常用信息为使用的设备id为2138,性别为男,年龄21岁,北京大学,gpa为3.4在过去的30天里面活跃了7天,发帖数量为2,回答数量为12
。。。
最后一行表示:id为7的用户的常用信息为使用的设备id为4321,性别为男,年龄26岁,复旦大学,gpa为3.6在过去的30天里面活跃了9天,发帖数量为6,回答数量为52   根据示例,你的查询应返回以下结果:
university avg_question_cnt
浙江大学 1.0000
北京大学 2.5000
复旦大学 5.5000
山东大学 11.0000

  题解: 不同大学:group by university 平均发帖,保留4位:round(avg(question_cnt),4)
按发帖情况升序:order by round(avg(question_cnt),4)  (升序:asc,可以不写,默认升序;降序:desc)

 

 6、多表查询

描述

题目:现在运营想要查看所有来自浙江大学的用户题目回答明细情况,请你取出相应数据   示例 :question_practice_detail
id device_id question_id result
1 2138 111 wrong
2 3214 112 wrong
3 3214 113 wrong
4 6543 114 right
5 2315 115 right
6 2315 116 right
7 2315 117 wrong
第一行表示:id为1的用户的常用信息为使用的设备id为2138,在question_id为111的题目上,回答错误 .... 最后一行表示:id为7的用户的常用信息为使用的设备id为2135,在question_id为117的题目上,回答错误   示例: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.0 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 female 26 复旦大学 3.6 9 6 52
第一行表示:id为1的用户的常用信息为使用的设备id为2138,性别为男,年龄21岁,北京大学,gpa为3.4在过去的30天里面活跃了7天,发帖数量为2,回答数量为12
。。。
最后一行表示:id为7的用户的常用信息为使用的设备id为4321,性别为男,年龄26岁,复旦大学,gpa为3.6在过去的30天里面活跃了9天,发帖数量为6,回答数量为52     根据示例,你的查询应返回以下结果,查询结果根据question_id升序排序: 解释: 根据题目的数据只有1个浙江大学的用户,那么把浙江大学这个用户所有答题数据查询出来就行    

完整代码:

select qpd.device_id, qpd.question_id, qpd.result
from question_practice_detail as qpd
inner join user_profile as up
on up.device_id=qpd.device_id and up.university='浙江大学'
order by question_id

方法2代码:

select device_id, question_id, result
from question_practice_detail
where device_id in (
select device_id from user_profile
where university='浙江大学'
)
order by question_id

7、 统计每个学校的答过题的用户的平均答题数

描述

运营想要了解每个学校答过题的用户平均答题数量情况,请你取出数据。     用户信息表 user_profile,其中device_id指终端编号(认为每个用户有唯一的一个终端),gender指性别,age指年龄,university指用户所在的学校,gpa是该用户平均学分绩点,active_days_within_30是30天内的活跃天数。
device_id gender age university gpa active_days_within_30
2138 male 21 北京大学 3.4 7
3214 male NULL 复旦大学 4 15
6543 female 20 北京大学 3.2 12
2315 female 23 浙江大学 3.6 5
5432 male 25 山东大学 3.8 20
2131 male 28 山东大学 3.3 15
4321 male 28 复旦大学 3.6 9
第一行表示:用户的常用信息为使用的设备id为2138,性别为男,年龄21岁,北京大学,gpa为3.4,在过去的30天里面活跃了7天 最后一行表示:用户的常用信息为使用的设备id为4321,性别为男,年龄28岁,复旦大学,gpa为3.6,在过去的30天里面活跃了9天   答题情况明细表 question_practice_detail,其中question_id是题目编号,result是答题结果。
device_id question_id result
2138 111 wrong
3214 112 wrong
3214 113 wrong
6543 111 right
2315 115 right
2315 116 right
2315 117 wrong
5432 118 wrong
5432 112 wrong
2131 114 right
5432 113 wrong
第一行表示用户的常用信息为使用的设备id为2138,在question_id为111的题目上,回答错误 .... 最后一行表示用户的常用信息为使用的设备id为5432,在question_id为113的题目上,回答错误   请你写SQL查找每个学校用户的平均答题数目(说明:某学校用户平均答题数量计算方式为该学校用户答题总次数除以答过题的不同用户个数)根据示例,你的查询应返回以下结果(结果保留4位小数),注意:结果按照university升序排序!!!  
university avg_answer_cnt
北京大学 1.0000
复旦大学 2.0000
山东大学 2.0000
浙江大学 3.0000
  解释: 第一行:北京大学总共有2个用户,2138和6543,2个用户在question_practice_detail里面答了2题,平均答题数目为2/2=1.0000 .... 最后一行:浙江大学总共有1个用户,2315,这个用户在question_practice_detail里面答了3题,平均答题数目为3/1=3.0000

问题分解:

  • 限定条件:无;
  • 每个学校:按学校分组,group by university
  • 平均答题数量:在每个学校的分组内,用总答题数量除以总人数即可得到平均答题数量count(question_id) / count(distinct device_id)
  • 表连接:学校和答题信息在不同的表,需要做连接

select

up.university, count(question_id) / count(distinct qpd.device_id) avg_answer_cnt from user_profile up inner join question_practice_detail qpd on up.device_id = qpd.device_id group by university  

标签:实战,cnt,university,30,question,牛客,mysql,male,id
From: https://www.cnblogs.com/yingyingShare/p/17167508.html

相关文章

  • Python识别图形验证码实战项目
    一、前言前几天有人问我的框架在登录时支不支持用户名、密码以及验证码。我回答是不支持,因为验证码是为了防爬虫的,自动化遇到有验证码可以叫开发去掉或者写个万能验证......
  • mysql隔离级别
    最近在公司项目上遇到一个问题,客户使用某个功能经常出现重复数据,后面经排查,发下这个功能因为设计到递归,而且是一个粒度比较大的事务,操作比较耗时,mysql数据库使用了......
  • linux基本功之date命令实战
    前言在日常工作中,我们经常会用到date命令来判断任务执行的时间,或者使用date命令去实现时间段内的工作任务,今天我们一起来探讨下date命令一、date简介date英[deɪt]日期,时......
  • Python实战项目4-首页搭建/git安装使用
    前台主页功能首页页面组件头部组件(小组件)<template><divclass="header"><divclass="slogan"><p>老男孩IT教育|帮助有志向的年轻人通......
  • MySQL数据库架构&SQL注入漏洞
    查找zblog数据库中有哪些表SELECTTABLE_SCHEMA,TABLE_NAMEFROMinformation_schema.`TABLES`WHERETABLE_SCHEMA='zblog';查找目标表(zbp_category)中的字段SELECT6,COLU......
  • 国产计算机开发实践之环境搭建(Java+Mysql+Idea)
    操作系统:统信UOS/麒麟架构:aarch64(命令行uname-m查看)一、Java1.解压安装包(注:在安装包所在路径下输入命令)sudotar-zxvfjdk-8u271-linux-aarch64.tar.gz-C/usr/loca......
  • 推荐系统[八]算法实践总结V2:排序学习框架(特征提取标签获取方式)以及京东推荐算法精排
    0.前言「排序学习(LearningtoRank,LTR)」,也称「机器排序学习(Machine-learnedRanking,MLR)」,就是使用机器学习的技术解决排序问题。自从机器学习的思想逐步到信息检索等领域......
  • yum卸载mysql
    查找mysql安装的文件:rpm-qa|grep-imysql卸载查找出的文件:yumremove"文件名"查看是否卸载完成:rpm-qa|grep-imysql查找mysql相......
  • MySQL 查询常用操作(0) —— 查询语句的执行顺序
    MySQL中明确查询语句的执行顺序极其重要,了解执行顺序才不至于犯一些简单错误,例如having后面是否可以使用select中重命名的列名等问题。另外SQL中实际使用最频繁的就是查......
  • 利用python操作数据库MySQL
    一、python操作MySQL的库(包)1.PythonDatabasAPI   Python操作数据库的标准接口为PythonDatabasAPISpecificationV2.0,其定义了在python中操作数据库的方法......