sql语句牛客练习

文章目录

  • 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.rhkb.cn/news/437291.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Linux相关概念和重要知识点(11)(进程调度、Linux内核链表)

1.Linux调度算法 上篇文章我粗略讲过queue[140]的结构&#xff0c;根据哈希表&#xff0c;我们可以将40个不同优先级的进程借助哈希桶链入queue[140]中。调度器会根据queue的下标来进行调度。但这个具体的调度过程是怎样的呢&#xff1f;以及runqueue和queue[140]的关系是什么…

DC00025【含论文】基于协同过滤推荐算法springboot视频推荐管理系统

1、项目功能演示 DC00025【含文档】基于springboot短视频推荐管理系统协同过滤算法视频推荐系统javaweb开发程序设计vue 2、项目功能描述 短视频推荐系统分为用户和系统管理员两个角色 2.1 用户角色 1、用户登录、用户注册 2、视频中心&#xff1a;信息查看、视频收藏、点赞、…

Leecode热题100-84.柱状图中的最大矩形

给定 n 个非负整数&#xff0c;用来表示柱状图中各个柱子的高度。每个柱子彼此相邻&#xff0c;且宽度为 1 。 求在该柱状图中&#xff0c;能够勾勒出来的矩形的最大面积。 示例 1: 输入&#xff1a;heights [2,1,5,6,2,3] 输出&#xff1a;10 解释&#xff1a;最大的矩形为图…

Python核心知识:pip使用方法大全

什么是 pip&#xff1f; pip 是 Python 的包管理工具&#xff0c;允许用户安装、升级和管理 Python 的第三方库和依赖。它极大地简化了开发过程&#xff0c;使开发者可以轻松地获取并安装所需的软件包。pip 已成为 Python 项目中最常见的包管理工具&#xff0c;并且自 Python …

SQL第10课挑战题

1. 从OrderItems表中返回每个订单号order_num各有多少行数order_lines&#xff0c;并按order_lines对结果进行排序 2. 返回名为cheapest_item的字段&#xff0c;该字段包含每个供应商成本最低的产品&#xff08;使用products表中的prod_price)&#xff0c;然后从最低成本到最高…

房屋水电费:重新布局,重构JS代码

<!DOCTYPE html> <html lang"zh-CN"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>房租水电费</title><script type"…

计算机网络:计算机网络概述:网络、互联网与因特网的区别

文章目录 网络、互联网与因特网的区别网络分类 互联网因特网基于 ISP 的多层次结构的互连网络因特网的标准化工作因特网管理机构因特网的组成 网络、互联网与因特网的区别 若干节点和链路互连形成网络&#xff0c;若干网络通过路由器互连形成互联网 互联网是全球范围内的网络…

「安装」 Windows下安装CUDA和Pytorch

「安装」 Windows下安装CUDA和Pytorch 文章目录 「安装」 Windows下安装CUDA和PytorchMac、Linux、云端Windows安装CUDA安装miniconda安装PyTorch测试总结 其他 Mac、Linux、云端 Mac、Linux、云端安装Miniconda和Pytorch的方法参考其他资料。 Windows 下面进行Windows下安装…

VB.net读写NDEF标签URI智能海报WIFI蓝牙连接

本示例使用的发卡器&#xff1a;https://item.taobao.com/item.htm?ftt&id615391857885 Public Class Form1Dim oldpicckey(0 To 5) As Byte 卡片旧密码Dim newpicckey(0 To 5) As Byte 卡片新密码Function GetTagUID() As StringDim status As ByteDim myctrlword As …

Python编程和开发过程中让人编程效率和舒适度很高的工具Anaconda

编程工作为什么需要提高效率&#xff1f; 在日益繁忙的工作环境中&#xff0c;选择合适的编程工具已成为提升开发者工作效率的关键。不同的工具能够帮助我们简化代码编写、自动化任务、提升调试速度&#xff0c;甚至让团队协作更加顺畅。 那么&#xff0c;编写python代码过程中…

c#使用winscp库实现FTP/SFTP/SCP的获取列表、上传和下载功能

网上写c#调用winscp实现的资料很少&#xff0c;且写的不够详细。本人查了下winscp的libraries说明&#xff0c;写了个小工具&#xff0c;供大家参考。 winscp的接口说明地址如下&#xff1a; WinSCP .NET Assembly and COM Library :: WinSCP 一、先展示一下小工具的界面 1、…

资源《Arduino 扩展板3-WS2812》说明。

资源链接&#xff1a; Arduino 扩展板3-WS2812 1.文件明细&#xff1a; 2.文件内容说明 包含&#xff1a;AD工程、原理图、PCB。 3.内容展示 4.简述 该文件为PCB工程&#xff0c;采用AD做的。 该文件打板后配合Arduino使用&#xff0c;属于Arduino的扩展板。 该文件主要…

AI助力CMIP6数据处理技术及在气候变化、生态农业、水文多领域实践应用

查看原文>>>AI助力CMIP6数据处理技术及在气候变化、生态农业、水文多领域实践应用 目录 专题一 CMIP6中的模式比较计划 专题二 数据下载 专题三 基础知识3.1 Python基础 专题四 单点降尺度 专题五 统计方法的区域降尺度 专题六 基于WRF模式的动力降尺度 专题七…

RabbitMQ的相关题

一、 MQ的作⽤及应⽤场景 类似问题: 项⽬什么场景下使⽤到了MQ, 为什么需要MQ? RabbitMQ 的作⽤?使⽤场景有哪些? RabbitMQ…

【Linux】第一个小程序——进度条实现

&#x1f525; 个人主页&#xff1a;大耳朵土土垚 &#x1f525; 所属专栏&#xff1a;Linux系统编程 这里将会不定期更新有关Linux的内容&#xff0c;欢迎大家点赞&#xff0c;收藏&#xff0c;评论&#x1f973;&#x1f973;&#x1f389;&#x1f389;&#x1f389; 文章目…

Docker仓库搭建

目录 一、Docker Hub 二、私有Registry仓库搭建 1、下载并开启仓库镜像registry 2、Registry加密传输 3、建立一个registry仓库 4、为客户端建立证书 5、测试 6、为仓库建立登录认证 三、Harbor仓库搭建 Docker 仓库&#xff08;Docker Registry&#xff09; 是用于存…

PHP程序如何实现限制一台电脑登录?

PHP程序如何实现限制一台电脑登录&#xff1f; 可以使用以下几种方法&#xff1a; 1. IP地址限制&#xff1a;在PHP中&#xff0c;可以通过获取客户端的IP地址&#xff0c;然后与允许登录的IP地址列表进行比对。如果客户端的IP地址不在列表中&#xff0c;就禁止登录。 “php $…

快速创建第一个Spring Boot 项目

一、介绍 Spring Boot 是一个开源的 Java 基础框架&#xff0c;它基于 Spring 框架&#xff0c;用于创建独立、生产级别的基于 Spring 的应用程序&#xff0c;你可以“跑起来”&#xff08;run&#xff09;你的 Spring 应用程序。Spring Boot 让基于 Spring 的应用开发变得更容…

基于单片机的两轮直立平衡车的设计

本设计基于单片机设计的两轮自平衡小车&#xff0c;其中机械部分包括车体、车轮、直流电机、锂电池等部件。控制电路板采用STC12C5A60S2作为主控制器&#xff0c;采用6轴姿态传感器MPU6050测量小车倾角&#xff0c;采用TB6612FNG芯片驱动电机。通过模块化编程完成了平衡车系统软…

leetcode:380. O(1) 时间插入、删除和获取随机元素

实现RandomizedSet 类&#xff1a; RandomizedSet() 初始化 RandomizedSet 对象bool insert(int val) 当元素 val 不存在时&#xff0c;向集合中插入该项&#xff0c;并返回 true &#xff1b;否则&#xff0c;返回 false 。bool remove(int val) 当元素 val 存在时&#xff0…