sql语句牛客练习

news2024/11/27 6:28:43

文章目录

  • 1. SQL21 浙江大学用户题目回答情况
    • ① 错误
    • ② 正确
  • 2. SQL22 统计每个学校的答过题的用户的平均答题数
    • ① 错误
    • ② 正确
  • 3. SQL23 统计每个学校各难度的用户平均刷题数
  • 4. SQL25 查找山东大学或者性别为男生的信息
    • ① 错误
    • ② 正确
  • 5. SQL26 计算25岁以上和以下的用户数量
    • ① 错误
    • ② 正确
  • 6. SQL29 计算用户的平均次日留存率
  • 7. SQL33 找出每个学校GPA最低的同学
    • ① 错误
    • ② 正确
  • 8. SQL34 统计复旦用户8月练题情况
    • ① 错误
    • ② 正确
  • 9. SQL35 浙大不同难度题目的正确率
    • ① 错误
    • ② 正确

1. SQL21 浙江大学用户题目回答情况

SQL21 浙江大学用户题目回答情况

① 错误

最开始想的是用内连接

select question_practice_detail.device_id, question_id, result from user_profile right join question_practice_detail on user_profile.device_id = question_practice_detail.device_id;

② 正确

看了一下讨论的部分发现我之前错的原因在于没有限定学校为浙江大学

内连接:
select question_practice_detail.device_id, question_id, result from user_profile inner join question_practice_detail on user_profile.device_id = question_practice_detail.device_id where university = '浙江大学';
右连接:
select question_practice_detail.device_id, question_id, result from user_profile right join question_practice_detail on user_profile.device_id = question_practice_detail.device_id where university = '浙江大学';

还看到一个用子查询解决的,试着写了一下,发现可以

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

眼瞎了一下,又看了一下题目列表,发现这题的标签写的就是子查询🤣

2. SQL22 统计每个学校的答过题的用户的平均答题数

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

① 错误

select university, count(question_id) / count(question_practice_detail.device_id) as avg_answer_cnt from user_profile right join question_practice_detail on user_profile.device_id = question_practice_detail.device_id group by university order by avg_answer_cnt;

我感觉问题主要在于如何给 question_practice_detail 中的device_id去重

② 正确

最后还是看了题解。之前把去重写成了 count(question_id) / distinct count(question_practice_detail.device_id),结果不对。

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

order by avg_answer_cnt也不能写。因为这会导致出现两次排序

3. SQL23 统计每个学校各难度的用户平均刷题数

SQL23 统计每个学校各难度的用户平均刷题数

select university, difficult_level, count(question_practice_detail.question_id) / count(distinct(question_practice_detail.device_id)) from user_profile inner join question_practice_detail inner join question_detail on user_profile.device_id = question_practice_detail.device_id and question_practice_detail.question_id = question_detail.question_id group by university , difficult_level;
注意最后group by university , difficult_level; ,如果两个分类依据用and连接会报错

4. SQL25 查找山东大学或者性别为男生的信息

SQL25 查找山东大学或者性别为男生的信息

① 错误

没有限定输出顺序

select all device_id, gender, age, gpa from user_profile where university = '山东大学' or gender = 'male';

② 正确

不太知道怎么确认输出顺序,所以看了一下题解。解决方案是用union关联两个查询语句,并且先查山东大学的

select device_id, gender, age, gpa from user_profile where university = '山东大学' union all select device_id, gender, age, gpa from user_profile where gender = 'male';

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

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

① 错误

select age_cut , if(age >= 25, '25岁及以上', '25岁以下') as age from user_profile group by age;

② 正确

不太知道怎么分别显示出这俩分类的字段,也不太知道该怎么分别统计,所以看了一下题解

select if(age >= 25, '25岁及以上', '25岁以下') as age_cut, count(*) as result from user_profile group by age_cut;

select ( case when age >= 25 then '25岁及以上' else '25岁以下' end ) as age_cut, count(*) as result from user_profile group by age_cut;

select ( case when age < 25 or age is null then '25岁以下' when age >= 25 then '25岁及以上' end )as age_cut, count(*) as result from user_profile group by age_cut;

6. SQL29 计算用户的平均次日留存率

SQL29 计算用户的平均次日留存率

样例的结果都不知道怎么来的,所以就看了题解 题解地址
date_add()函数

select count(distinct nq.device_id, datee) / count(distinct q.device_id, date) from (select distinct device_id, date from question_practice_detail) as q left join (select distinct device_id, date_add(date, interval 1 day) as datee from question_practice_detail) as nq on q.device_id = nq.device_id and q.date = nq.datee;
在这里插入图片描述

7. SQL33 找出每个学校GPA最低的同学

SQL33 找出每个学校GPA最低的同学

窗口函数

① 错误

看了窗口函数这个教程后写的,现在的问题在于没有去重。这条语句的结果是查出来所有学生的信息,然后该生所属学校的最低gpa表示其gpa

select distinct device_id, university, min(gpa) over (partition by university)from user_profile;
在这里插入图片描述
在这里插入图片描述

② 正确

方法一:子查询在这里插入图片描述
在这里插入图片描述
【中字】SQL进阶教程 | 史上最易懂SQL教程
方法二:窗口函数
在这里插入图片描述
select device_id, university, gpa from ( select device_id, university, gpa, row_number() over (partition by university order by gpa) as rk from user_profile )as a where rk = 1;

8. SQL34 统计复旦用户8月练题情况

SQL34 统计复旦用户8月练题情况

① 错误

不知道该怎么统计题目数量,以及正确的题目数据。下面这个只是筛选出了符合条件的sql语句

select user_profile.device_id, university, result from user_profile left join question_practice_detail on user_profile.device_id = question_practice_detail.device_id having university = '复旦大学';

select count(result) from question_practice_detail where result = 'right';

select count(result) from question_practice_detail where result = 'right';

代码异常:
select user_profile.device_id, university, count(q)as right_question_cnt from user_profile where device_id in (select device_id from question_practice_detail where result = 'right') as q on user_profile.device_id = question_practice_detail.device_id having university = '复旦大学';

② 正确

在这里插入图片描述
在这里插入图片描述
select user_profile.device_id, university, sum(if(result is null, 0, 1))as question_cnt, sum(if(result = 'right', 1, 0)) as right_question_cnt from user_profile left join question_practice_detail on user_profile.device_id = question_practice_detail.device_id where university = '复旦大学' and (month(date) = 8 or date is null) group by user_profile.device_id;

9. SQL35 浙大不同难度题目的正确率

SQL35 浙大不同难度题目的正确率

① 错误

select difficult_level, (sum(if(result = 'right', 1, 0)) / sum(if(result is null, 0, 1))) as correct_rate from user_profile left join question_practice_detail left join question_detail on user_profile.device_id = question_practice_detail.device_id and question_practice_detail.question_id = qeustion_detail.question_id where university = '浙江大学' group by difficult_level;
① 除去代码异常外,忽略的条件:按照正确率升序排序
② 代码错误原因:主表选择错误、from 后面没有加括号、两个连接条件应该分开写

代码异常:
select ( case when result = 'easy' then 'easy' when result = 'medium' then 'medium' when result = 'hard' then 'hard' end ) as difficult_level, count(*) as test from user_profile left join question_practice_detail left join question_detail on user_profile.device_id = question_practice_detail.device_id and question_practice_detail.question_id = qeustion_detail.question_id where university = '浙江大学'group by difficult_level;

② 正确

题解
看了题解后写的,有略微改动:
select difficult_level, (sum(if(result = 'right', 1, 0)) / sum(if(result is null, 0, 1))) as correct_rate from (question_practice_detail left join user_profile on question_practice_detail.device_id = user_profile.device_id left join question_detail on question_detail.question_id = question_practice_detail.question_id )where university = '浙江大学' group by difficult_level order by correct_rate asc;

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2187203.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Wireshark 解析QQ、微信的通信协议|TCP|UDP

写在前面 QQ&#xff0c;微信这样的聊天软件。我们一般称为im&#xff0c;Instant Messaging&#xff0c;即时通讯系统。那大家会不会有疑问&#xff0c;自己聊天内容会不会被黑客或者不法分子知道&#xff1f;这种体量的im是基于tcp还是udp呢&#xff1f;这篇文章我们就来探索…

基于Springboot的在线订餐系统设计与实现(论文+源码)_kaic

摘 要 当今世界&#xff0c;互联网以及和互联网有关的行业都在不断的发展&#xff0c;也在持续走进人们的生活&#xff0c;在此趋势下人们对于通过互联网解决生活问题的需求愈来愈多&#xff0c;本文考虑到了这些情况后做出了该订餐系统。 本系统选择了MySQL作为主要存储单元…

搭建k8s集群服务(kubeadm方式)

准备工作 操作系统版本&#xff1a;CentOS Linux release 7.9.2009 (Core) 虚拟机硬件配置&#xff1a;2核8G内存&#xff08;最低2G&#xff09;&#xff0c;硬盘最低25G&#xff1b; linux内核版本&#xff08;3.10版本尝试失败&#xff09;&#xff1a;5.4.268-1.el7.elr…

每日读则推(三)

n.(事件的)发生地点,(活动的)场所 n.雄性大园丁鸟 n.多细枝的,苗条的 v.放大,扩大(声音);增强,加强 Male great bowerbirds build twiggy concert venues that amplify their raucous songs and n.园丁鸟 …

讲职场:不要经常说消极的话

1、不要经常说消极的话&#xff0c;不要接触让自己力量消失的人 习惯性用强大的语言加持自己&#xff0c;才能立起来 2、只要你下决心钻研一门技术&#xff0c;你就全身心扑在上面&#xff0c;把每一个细节研究透&#xff0c;只有这样&#xff0c;你才能在学会之后&#xff0…

投资精明之选,国内外低代码平台性价比排行榜

本文介绍了国内外10大低代码平台的特点及性价比&#xff0c;包括ZohoCreator、OutSystems等&#xff0c;强调低代码平台通过简化开发过程&#xff0c;提高应用开发效率和质量&#xff0c;适合不同规模企业。选择时考虑企业需求和预算&#xff0c;建议试用后再决策。 一、Zoho C…

Apache安装后无法启动的问题“不能再本地计算机启动apache”

首先安装 参考这位博主的小白下载和安装Apache的教程&#xff08;保姆级&#xff09; 遇到的问题 在启动的时候遇到问题 说apache不能在本地计算机启动 解决方法 1. 路径检查 首先&#xff01;&#xff01;&#xff01; 请仔细检查你的httpd.conf文件中的Apache路径是否…

基于Springboot+Vue的汉服交易小程序的设计与实现(含源码+数据库)

1.开发环境 开发系统:Windows10/11 架构模式:MVC/前后端分离 JDK版本: Java JDK1.8 开发工具:IDEA 数据库版本: mysql5.7或8.0 数据库可视化工具: navicat 服务器: SpringBoot自带 apache tomcat 主要技术: Java,Springboot,mybatis,mysql,vue 2.视频演示地址 3.功能 系统定…

Git版本控制工具--关于命令

Git版本控制工具 学习前言 在项目开发中&#xff0c;总是需要多个人同时对一个项目进行修改&#xff0c;如何高效快速地进行修改&#xff0c;且控制各自修改的版本不会和他人的进行重叠&#xff0c;这就需要用到Git分布式版本控制器了 作用 解决了一致性&#xff0c;并发性…

如何解决 Photoshop 中的“暂存盘已满”错误

好久没有用Photoshop了&#xff0c;今天想自己修个图&#xff0c;就启动了一下PS&#xff0c;结果出现一个对话框“不能初始化Photoshop&#xff0c;因为暂存盘已经满”。我一直存在C盘焦虑&#xff0c;常年C盘显示都是红色的。上网一查&#xff0c;发现PS启动时暂存盘的空间是…

YOLOv11改进 | Neck篇 | YOLOv11引入Gold-YOLO

1. Gold-YOLO介绍 1.1 摘要: 在过去的几年中,YOLO 系列模型已成为实时目标检测领域的领先方法。 许多研究通过修改架构、增加数据和设计新的损失,将基线提升到更高的水平。 然而,我们发现以前的模型仍然存在信息融合问题,尽管特征金字塔网络(FPN)和路径聚合网络(PANet)…

每日OJ题_牛客_DP13[NOIP2002 普及组]过河卒_路径dp_C++_Java

目录 牛客_DP13[NOIP2002 普及组]过河卒_路径dp 题目解析 C代码1 C代码2 Java代码 牛客_DP13[NOIP2002 普及组]过河卒_路径dp [NOIP2002 普及组] 过河卒_牛客题霸_牛客网 (nowcoder.com) 描述&#xff1a; 棋盘上 A点有一个过河卒&#xff0c;需要走到目标 B点。卒行走的…

总结一下 KNN、K-means 和 SVM【附代码实现】

小小总结一下 KNN、K-means 和 SVM 及其 Python 实现 好久没更新了&#xff0c;最近准备秋招&#xff0c;在机器学习中感觉经常被问的几个算法&#xff1a;K近邻算法&#xff08;K-Nearest Neighbors, KNN&#xff09;、K均值聚类算法&#xff08;K-means&#xff09;以及支持…

【网络通信基础与实践番外三】TCP的三次握手和四次挥手和例题

一、TCP连接的三次握手 第一次握手&#xff1a;客户端首先向服务器发送一个特殊的TCP报文&#xff0c;这个报文段首部不包含应用层数据&#xff0c;但是在报文段中有一个SYN标志位被置1。因此这个特殊的报文段也被叫做SYN报文段&#xff0c;然后客户端随机选择一个初始序列号&a…

【JWT安全】portswigger JWT labs 全解

目录 1.利用有缺陷的 JWT 签名验证 ①接受任意签名 lab1:通过未验证的签名绕过 JWT 身份验证 ②接受无签名的token lab2:通过有缺陷的签名验证来绕过 JWT 身份验证 2.暴力破解密钥 ①使用hashcat lab3:通过弱签名密钥绕过 JWT 身份验证 3.JWT 标头参数注入 ①通过 jwk…

kubevirt基于CDI创建虚拟机

CDI介绍 KubeVirt 的 Containerized Data Importer (CDI) 是一个 Kubernetes 原生的数据管理组件&#xff0c;专门为虚拟机 (VM) 提供存储支持&#xff0c;尤其在虚拟机的镜像管理和数据导入方面非常有用。CDI 的主要用途是帮助用户轻松地将外部数据源导入到 Kubernetes 集群中…

Linux线程(三)终止线程与回收线程详解

1.终止线程 在示例代码&#xff0c;我们在新线程的启动函数&#xff08;线程 start 函数&#xff09;new_thread_start()通过 return 返回之后&#xff0c;意味着该线程已经终止了&#xff0c;除了在线程 start 函数中执行 return 语句终止线程外&#xff0c;终止线程的方式还…

Qt基础之四十八:按钮为何会有点击效果

我们从一个最简单的Window API窗口程序开始说起。 一.一个最简单的Window API窗口程序 #include <windows.h> #include <wingdi.h> // 声明窗口过程函数 LRESULT CALLBACK WindowProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam);int WINAPI WinMain(HI…

Windows程序包管理器WinGet的使用方法

Windows 程序包管理器 WinGet 命令行工具作为应用安装程序的一部分在 Windows 11 和现代版本的 Windows 10 上提供。 WinGet 工具的当前预览版支持以下命令: 命令说明info显示有关系统的元数据&#xff08;版本号、体系结构、日志位置等&#xff09;。 有助于进行故障排除。i…

电磁兼容(EMC):整改案例(四)人体对EFT测试影响有多大?

目录 1. 异常现象 2. 原因分析 3. 整改方案 4. 总结 1. 异常现象 某产品按GB/T 17626.4标准进行电快速瞬变脉冲群测试&#xff0c;测试条件为&#xff1a;频率5kHz/100kHz&#xff0c;测试电压L&#xff0c;N线间2kV&#xff0c;L&#xff0c;N线对PE线4kV。测试过程中需要…