【牛客】SQL140 未完成率较高的50%用户近三个月答卷情况-窗口函数

描述

现有用户信息表user_info(uid用户ID,nick_name昵称, achievement成就值, level等级, job职业方向, register_time注册时间):

iduidnick_nameachievementleveljobregister_time
11001牛客1号32007算法2020-01-01 10:00:00
21002牛客2号25006算法2020-01-01 10:00:00
31003牛客3号♂22005算法2020-01-01 10:00:00

试卷信息表examination_info(exam_id试卷ID, tag试卷类别, difficulty试卷难度, duration考试时长, release_time发布时间):

idexam_idtagdifficultydurationrelease_time
19001SQLhard602020-01-01 10:00:00
29002SQLhard802020-01-01 10:00:00
39003算法hard802020-01-01 10:00:00
49004PYTHONmedium702020-01-01 10:00:00

试卷作答记录表exam_record(uid用户ID, exam_id试卷ID, start_time开始作答时间, submit_time交卷时间, score得分):

iduidexam_idstart_timesubmit_timescore
1100190012020-01-01 09:01:012020-01-01 09:21:5990
15100290012020-01-01 18:01:012020-01-01 18:59:0290
13100190012020-01-02 10:01:012020-01-02 10:31:0189
2100290012020-01-20 10:01:01
3100290012020-02-01 12:11:01
5100190012020-03-01 12:01:01
6100290012020-03-01 12:01:012020-03-01 12:41:0190
4100390012020-03-01 19:01:01
7100290012020-05-02 19:01:012020-05-02 19:32:0090
14100190022020-01-01 12:11:01
8100190022020-01-02 19:01:012020-01-02 19:59:0169
9100190022020-02-02 12:01:012020-02-02 12:20:0199
10100290022020-02-02 12:01:01
11100290022020-02-02 12:01:012020-02-02 12:43:0181
12100290022020-03-02 12:11:01
17100190022020-05-05 18:01:01
16100290032020-05-06 12:01:01

请统计SQL试卷上未完成率较高的50%用户中,6级和7级用户在有试卷作答记录的近三个月中,每个月的答卷数目和完成数目。按用户ID、月份升序排序。

由示例数据结果输出如下:

uidstart_monthtotal_cntcomplete_cnt
100220200231
100220200321
100220200521

解释:各个用户对SQL试卷的未完成数、作答总数、未完成率如下:

uidincomplete_cnttotal_cntincomplete_rate
1001370.4286
1002480.5000
1003111.0000

1001、1002、1003分别排在1.0、0.5、0.0的位置,因此较高的50%用户(排位<=0.5)为1002、1003;

1003不是6级或7级;

有试卷作答记录的近三个月为202005、202003、202002;

这三个月里1002的作答题数分别为3、2、2,完成数目分别为1、1、1。

方法一:使用date_format

with cte as(selectuidfrom(selectuid,incomplete_rate,percent_rank() over(order by incomplete_rate) as rnk1from(selectuid,sum(if(submit_time is null,1,0)) as incomplete_cnt,count(start_time) as total_cnt,sum(if(submit_time is null,1,0))/count(start_time) as incomplete_ratefromexam_recordwhereexam_id in (select exam_id from examination_info where tag='SQL')group by uid)t)t2 left join user_info using(uid)where rnk1>=0.5 and level>=6
)select
uid,start_month,total_cnt,complete_cnt
from(selectuid,date_format(start_time,'%Y%m') as start_month,count(start_time) as total_cnt,sum(if(submit_time is null,0,1)) as complete_cnt,dense_rank() over (partition by uid order by date_format(start_time,'%Y%m') desc) as rnk2fromexam_recordwhere uid in (select uid from cte)group by uid,date_format(start_time,'%Y%m'))t
where rnk2<=3
order by uid,start_month

方法二:使用left+replace

with cte as(selectuidfrom(selectuid,incomplete_rate,percent_rank() over(order by incomplete_rate) as rnk1from(selectuid,sum(if(submit_time is null,1,0)) as incomplete_cnt,count(start_time) as total_cnt,sum(if(submit_time is null,1,0))/count(start_time) as incomplete_ratefromexam_recordwhereexam_id in (select exam_id from examination_info where tag='SQL')group by uid)t)t2 left join user_info using(uid)where rnk1>=0.5 and level>=6
)select
uid,
replace(act_time, '-', '') as start_month,
total_cnt,complete_cnt
from(selectuid,left(start_time,7) as act_time,count(start_time) as total_cnt,sum(if(submit_time is null,0,1)) as complete_cnt,dense_rank() over (partition by uid order by date_format (start_time,'%Y%m') desc) as rnk2fromexam_recordwhere uid in (select uid from cte)group by uid,left(start_time,7))t
where rnk2<=3
order by uid,act_time

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

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

相关文章

(vue)适合后台管理系统开发的前端框架

(vue)适合后台管理系统开发的前端框架 1、D2admin 开源地址&#xff1a;https://github.com/d2-projects/d2-admin 文档地址&#xff1a;https://d2.pub/zh/doc/d2-admin/ 效果预览&#xff1a;https://d2.pub/d2-admin/preview/#/index 开源协议&#xff1a;MIT 2、vue-el…

服务器上部署WEb服务方法

部署Web服务在服务器上是一个比较复杂的过程。这不仅仅涉及到配置环境、选择软件和设置端口&#xff0c;更有众多其它因素需要考虑。以下是在服务器上部署WEb服务的步骤&#xff1a; 1. 选择服务器&#xff1a;根据项目规模和预期访问量&#xff0c;选择合适的服务器类型和配置…

Linux 进程间通信

目录 管道 匿名管道&#xff08;pipe&#xff09; 有名管道&#xff08;fifo&#xff09; 小结 共享内存 消息队列 信号量 System V IPC的结构设计 Posix与System V的关系 管道 匿名管道&#xff08;pipe&#xff09; 我们知道&#xff0c;在Linux中通过fork创建的子…

OpenDDS之QosXml库编译(Windows + VS2019)

目录 1、需求背景2、基础环境3、编译xercesc3.1、下载xercesc3.2、编译xercesc 4、编译ACE_XML_Utils4.1、生成XML_Utils解决方案4.2、编译XML_Utils 5、编译QOS_XML_XSC_Handlerd5.1、生成QOS_XML_XSC_Handlerd解决方案5.2、编译QOS_XML_XSC_Handlerd 6、测试例子6.1、生成dum…

抖音小店简洁版运营流程,帮助新手商家快速学习!

大家好&#xff0c;我是电商糖果 一个做了7年电商的90后&#xff0c;从2020年开始做抖音小店&#xff0c;现在已经经营了多家小店。 这篇文章从开店到选品&#xff0c;出体验分&#xff0c;找达人合作&#xff0c;对接厂家等全部给分享出来。 一、准备材料 1. 个体户营业执…

光影交织:汽车穿越隧道的视觉盛宴

在繁忙的城市中&#xff0c;隧道成为了连接两端的重要通道。而对于汽车来说&#xff0c;穿越隧道不仅是一次简单的空间转移&#xff0c;更是一场融合了视觉、技术与安全的独特体验。 当汽车缓缓驶入隧道&#xff0c;外界的光线逐渐减弱&#xff0c;隧道内部的光线开始发挥作用。…

运营微信公众号的四大关键步骤

1. 明确运营目的 首先&#xff0c;我们需要明确运营微信公众号的目的。不同行业和企业可能有不同的目标&#xff0c;但总体来说&#xff0c;都是为了获得相关利益。对于企业来说&#xff0c;建立口碑&#xff0c;树立形象是非常重要的。通过用户的口碑传播&#xff0c;可以提高…

Ubuntu下anaconda迁移到另外的目录

文章目录 前言一、原因二、迁移1.复制到指定迁移目录2. 修改复制后的anaconda3 内容3. 修改对应搭建的每个环境的pip4.修改系统配置文件&#xff0c;使得设置生效 三、实际测试四、总结 前言 好记性不如烂笔头&#xff0c;简单的记录下在ubantu18.04下迁移anaconda的目录 一、…

2024年软考重大改革

中国计算机技术职业资格网 考试日期 考试级别 考试资格名称 5月25日至28日 高级 系统分析师 系统架构设计师 信息系统项目管理师 中级 软件设计师 网络工程师 软件评测师 电子商务设计师 嵌入式系统设计师 数据库系统工程师 信息系统管理工程师 初级 程序员 …

DiffusionMat:Alpha Matting as sequential refinement learning

1.introduction DiffusionMat的基本思想是未知区域的抠图可以逐步改进&#xff0c;并从每一次的迭代的反馈中受益&#xff0c;纠正和细化结果。 2.related works Segdiff、BitDiffusion、DiffusionDet、 3.Approach 通过一种新颖的校正策略将trimap引导转化为精确的alpha m…

2024-简单点-picamera2除了文档还有哪里可以学习实例?

picamera2学习例子 去github的picamera2库&#xff0c;找app和examples目录&#xff0c;然后学习

自动化测试基础——allure下载安装及配置及pytest + allure-pytest插件生成allure企业级测试报告及企业级定制

文章目录 前言一、allure下载二、allure安装三、allure目录介绍四、allure环境变量配置五、pytest allure-pytest插件生成allure企业级测试报告六、allure企业级报告的log定制七、allure企业级报告功能内容定制1.功能左边层级定制2.功能右边优先级定制3.功能右边测试用例描述定…

Qt绘制动态罗盘

介绍&#xff1a;罗盘指针以30角旋转巡逻&#xff0c;扫描航海范围内的点位&#xff0c;并绘制点云。字段信息在表格中显示&#xff0c;该数据都存储在数据库中。选择不同的范围&#xff0c;显示该范围内的点位。 #include "mainwindow.h" #include "ui_mainwi…

Vue form中明细的el-table中删除行,界面除行时,数据删除了,但是列表不刷新。

<el-table :data"form.dataList"> …… </el-table > 当删除行后&#xff0c;数据为list&#xff0c; 数据代码如下&#xff1a; this.form.dataList list; 经常出现数据不进行刷新&#xff0c;但有时刷新是正确的。 把代码改成如下&#xff0c;就一…

魔行观察-每日品牌监测-书亦烧仙草-开店趋势

今日监测对象&#xff1a;书亦烧仙草&#xff0c;监测时间段&#xff1a;2014年9月至2023年12月&#xff0c;发布时间&#xff1a;2024-03-05 数据获取地址&#xff1a;魔查查https://www.moxingdata.com/品牌基础信息 现有门店人均消费覆盖省份经营模式投资金额837918.431特…

【力扣hot100】刷题笔记Day20

前言 今天学习了一句话“自己如果不努力&#xff0c;屎都吃不上热乎的”&#xff0c;话糙理不糙&#xff0c;与君共勉 35. 搜索插入位置 - 力扣&#xff08;LeetCode&#xff09; 二分查找 class Solution:def searchInsert(self, nums: List[int], target: int) -> int:n…

react hook: useCallback

useCallback的主要使用场景在于优化性能&#xff0c;并确保当传递回调函数给子组件时&#xff0c;子组件不会因为父组件的重渲染而重新创建函数。 使用场景 1.当你需要将回调函数传递给子组件时&#xff0c;使用useCallback可以确保子组件在重新渲染时不会不必要地重新创建函数…

【金三银四】每日一点面试题(Java--JUC篇)

1、如何在java中实现多线程&#xff1f; 在Java中实现多线程主要有四种方式&#xff1a; 继承 Thread 类 当一个类继承自Java的Thread类时&#xff0c;它就成为一个线程类。您需要做的只是覆盖run方法&#xff0c;该方法包含线程启动后执行的代码。 class MyThread extends …

10亿数据如何快速插入MySQL

最快的速度把10亿条数据导入到数据库,首先需要和面试官明确一下,10亿条数据什么形式存在哪里,每条数据多大,是否有序导入,是否不能重复,数据库是否是MySQL? 有如下约束 10亿条数据,每条数据 1 Kb 数据内容是非结构化的用户访问日志,需要解析后写入到数据库 数据存放在…

CMIP6数据处理方法与典型案例分析

气候变化对农业、生态系统、社会经济以及人类的生存与发展具有深远影响&#xff0c;是当前全球关注的核心议题之一。IPCC&#xff08;Intergovernmental Panel on Climate Change&#xff0c;政府间气候变化专门委员会&#xff09;的第六次评估报告明确&#xff1b;指出&#x…