【力扣 | SQL题 | 每日3题】力扣1107,1112, 1077

今天三道mid题都可以用窗口函数轻松秒杀。

1. 力扣1107:每日新用户统计

1.1 题目:

Traffic 表:

+---------------+---------+
| Column Name   | Type    |
+---------------+---------+
| user_id       | int     |
| activity      | enum    |
| activity_date | date    |
+---------------+---------+
该表可能有重复的行。
activity 列是 ENUM 类型,可能取 ('login', 'logout', 'jobs', 'groups', 'homepage') 几个值之一。

编写解决方案,找出从今天起最多 90 天内,每个日期该日期首次登录的用户数。假设今天是 2019-06-30 

以 任意顺序 返回结果表。

结果格式如下所示。

示例 1:

输入:
Traffic 表:
+---------+----------+---------------+
| user_id | activity | activity_date |
+---------+----------+---------------+
| 1       | login    | 2019-05-01    |
| 1       | homepage | 2019-05-01    |
| 1       | logout   | 2019-05-01    |
| 2       | login    | 2019-06-21    |
| 2       | logout   | 2019-06-21    |
| 3       | login    | 2019-01-01    |
| 3       | jobs     | 2019-01-01    |
| 3       | logout   | 2019-01-01    |
| 4       | login    | 2019-06-21    |
| 4       | groups   | 2019-06-21    |
| 4       | logout   | 2019-06-21    |
| 5       | login    | 2019-03-01    |
| 5       | logout   | 2019-03-01    |
| 5       | login    | 2019-06-21    |
| 5       | logout   | 2019-06-21    |
+---------+----------+---------------+
输出:
+------------+-------------+
| login_date | user_count  |
+------------+-------------+
| 2019-05-01 | 1           |
| 2019-06-21 | 2           |
+------------+-------------+
解释:
请注意,我们只关心用户数非零的日期.
ID 为 5 的用户第一次登陆于 2019-03-01,因此他不算在 2019-06-21 的的统计内。

1.2 思路:

首次登录=>排名第一=>窗口函数

row_number函数。

1.3 题解:

-- 首次登录=>排名第一=>窗口函数
-- 先得到activity全是login的记录
with tep as (select user_id, activity , activity_date, row_number() over (partition by user_id order by activity_date) ranksfrom Trafficwhere activity = 'login'
)
-- 然后将用户首次登录(排名第一)的过滤出来
-- 再activity_date分组查询即可
select activity_date login_date, count(*) user_count
from tep
where ranks = 1
group by activity_date
having activity_date >= '2019-04-01'

2. 力扣1112:每位学生的最高成绩

2.1 题目;

表:Enrollments

+---------------+---------+
| Column Name   | Type    |
+---------------+---------+
| student_id    | int     |
| course_id     | int     |
| grade         | int     |
+---------------+---------+
(student_id, course_id) 是该表的主键(具有唯一值的列的组合)。
grade 不会为 NULL。

编写解决方案,找出每位学生获得的最高成绩和它所对应的科目,若科目成绩并列,取 course_id 最小的一门。查询结果需按 student_id 增序进行排序。

查询结果格式如下所示。

示例 1:

输入:
Enrollments 表:
+------------+-------------------+
| student_id | course_id | grade |
+------------+-----------+-------+
| 2          | 2         | 95    |
| 2          | 3         | 95    |
| 1          | 1         | 90    |
| 1          | 2         | 99    |
| 3          | 1         | 80    |
| 3          | 2         | 75    |
| 3          | 3         | 82    |
+------------+-----------+-------+
输出:
+------------+-------------------+
| student_id | course_id | grade |
+------------+-----------+-------+
| 1          | 2         | 99    |
| 2          | 2         | 95    |
| 3          | 3         | 82    |
+------------+-----------+-------+

2.2 思路:

题目看到最高=>排名第一=>窗口函数

where ranks = 1过滤得到第一名。

2.3 题解:

-- 题目看到最高=>排名第一=>窗口函数
with tep as (select student_id, course_id, grade, rank() over (partition by student_id order by grade desc, course_id, student_id) ranksfrom Enrollments
)select student_id, course_id, grade
from tep
where ranks = 1

3. 力扣1077:项目员工3

3.1 题目:

项目表 Project

+-------------+---------+
| Column Name | Type    |
+-------------+---------+
| project_id  | int     |
| employee_id | int     |
+-------------+---------+
(project_id, employee_id) 是这个表的主键(具有唯一值的列的组合)
employee_id 是员工表 Employee 的外键(reference 列)
该表的每一行都表明具有 employee_id 的雇员正在处理具有 project_id 的项目。

员工表 Employee

+------------------+---------+
| Column Name      | Type    |
+------------------+---------+
| employee_id      | int     |
| name             | varchar |
| experience_years | int     |
+------------------+---------+
employee_id 是这个表的主键(具有唯一值的列)
该表的每一行都包含一名雇员的信息。

编写解决方案,报告在每一个项目中 经验最丰富 的雇员是谁。如果出现经验年数相同的情况,请报告所有具有最大经验年数的员工。

返回结果表 无顺序要求 。

结果格式如下示例所示。

示例 1:

输入:
Project 表:
+-------------+-------------+
| project_id  | employee_id |
+-------------+-------------+
| 1           | 1           |
| 1           | 2           |
| 1           | 3           |
| 2           | 1           |
| 2           | 4           |
+-------------+-------------+Employee 表:
+-------------+--------+------------------+
| employee_id | name   | experience_years |
+-------------+--------+------------------+
| 1           | Khaled | 3                |
| 2           | Ali    | 2                |
| 3           | John   | 3                |
| 4           | Doe    | 2                |
+-------------+--------+------------------+
输出:
+-------------+---------------+
| project_id  | employee_id   |
+-------------+---------------+
| 1           | 1             |
| 1           | 3             |
| 2           | 1             |
+-------------+---------------+
解释:employee_id 为 1 和 3 的员工在 project_id 为 1 的项目中拥有最丰富的经验。在 project_id 为 2 的项目中,employee_id 为 1 的员工拥有最丰富的经验。

3.2 思路:

-- 经验最丰富=>经验第一=>一眼窗口函数

where ranks = 1筛选出第一名。

3.3 题解:

-- 经验最丰富=>经验第一=>一眼窗口函数with tep as (select project_id, p.employee_id employee_id, dense_rank() over (partition by project_id order by experience_years desc) ranksfrom Project pjoin Employee e on p.employee_id  = e.employee_id 
)select project_id, employee_id
from tep
where ranks = 1

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

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

相关文章

mysql模糊查询优化

mysql模糊查询优化 一、合理使用索引 如下SQL举例: SELECT username,age FROM WHERE username LIKE ‘hysen%’ 如果username字段有索引,前缀匹配会走索引,如 ‘%hysen’或’%hysen%’ 则无法走索引。 二、使用反向索引 对于需要使用后缀…

解决关于HTML+JS + Servlet 实现前后端请求Session不一致的问题

1、前后端不分离情况 在处理session过程中,如果前后端项目在一个容器中,session是可以被获取的。例如如下项目结构: 结构 后端的代码是基本的设置值、获取值、销毁值的内容: 运行结果 由此可见,在前后统一的项目中&a…

Redis 配置小插曲

前言:当今,我们进行后端部署redis时候,总是会遇到各种问题,这不今天就发现了,redis在下载下来的时候,redis.windows.conf,文件中,默认是没有为redis配置密码才被允许进行登录的&…

《Linux从小白到高手》综合应用篇:详解Linux系统调优之服务器硬件优化

List item 本篇介绍Linux服务器硬件调优。硬件调优主要包括CPU、内存、磁盘、网络等关键硬件组。 1. CPU优化 选择适合的CPU: –根据应用需求选择多核、高频的CPU,以满足高并发和计算密集型任务的需求。CPU缓存优化: –确保CPU缓存&#x…

Go语言反射机制详解:通过反射获取结构体的字段和方法

在Go语言中,反射(Reflection) 是一种强大的工具,允许我们在程序运行时动态地检查和修改变量的类型、 反射在很多场景中都有广泛的应用,如ORM(对象关系映射)框架、序列化与反序列化工具等。 一、…

SAP导出excel报错:发现“EXPORT.XLSX“中的部分内容有问题。是否让我们尽量尝试恢复?如果您信任此工作簿的源,请单击“是”。

1.问题描述:SAP报表程序导出excel的时报错 2.问题原因 文本信息中包含了非法符号(SAP不认识的符号) 比如:NLSY10 3.解决方式,把这个文本信息特殊符号去掉,就可以恢复正常了。 怎么找这个特殊符号&#…

2019年计算机网络408真题解析

第一题: 解析:OSI参考模型第5层完成的功能 首先,我们需要对OSI参考模型很熟悉:从下到上依次是:物理层-数据链路层-网络层- 运输层-会话层-表示层-应用层,由此可知,题目要问的是会话层的主要功能…

第十五章 RabbitMQ延迟消息之延迟插件

目录 一、引言 二、延迟插件安装 2.1. 下载插件 2.2. 安装插件 2.3. 确认插件是否生效 三、核心代码 四、运行效果 五、总结 一、引言 上一章我们讲到通过死信队列组合消息过期时间来实现延迟消息,但相对而言这并不是比较好的方式。它的代码实现相对来说比…

嵌入式开发:STM32 硬件 CRC 使用

测试平台:STM32G474系列 STM32硬件的CRC不占用MCU的资源,计算速度快。由于硬件CRC需要配置一些选项,配置不对就会导致计算结果错误,导致使用上没有软件计算CRC方便。但硬件CRC更快的速度在一些有时间资源要求的场合还是非…

编程的魅力

在数字时代的浪潮中,编程已成为连接现实与虚拟世界的桥梁,它不仅塑造了我们的生活方式,还深刻影响着科技进步的每一步。编程,这一看似复杂而神秘的领域,实则蕴含着无限的创造力和可能性。本文将深入探讨编程的魅力、基…

R语言中,.RData 和 .rds 的区别

.RData 和 .rds 是 R 语言中两种不同的数据保存格式,二者有一些关键的区别: 1. 存储内容的类型: .RData 文件:可以同时保存多个对象(如数据框、向量、列表等),当你加载 .RData 文件时&#xf…

使用python批量替换文件夹文件名(已亲测)

1. 需要使用高版本的python,本机版本 3.12.4 2. 配置国内Python镜像源 常用的国内Python镜像源: 清华大学TUNA镜像源:这是非常受欢迎的一个镜像源,提供了高速且稳定的服务。 地址:https://pypi.tuna.tsinghua.edu.cn/simple 临时…

基于DCGM+Prometheus+Grafana的GPU监控方案

目录 前言一、指标导出器1、DCGM:获取远程节点的信息 2、 DCGM-Exporter收集多节点信息更改收集指标 二、 Prometheus - From metrics to insight修改配置文件查看收集结果 三、Grafana仪表板展示导入数据源创建仪表板更多仪表板 前言 基于DCGM(NVIDIA …

DNS安全概述

一、DNS的解析过程 1.递归解析 递归解析是一种由DNS客户端(通常是用户的应用程序,如一个浏览器)向本地DNS解析器发出解析请求,然后本地DNS解析器负责查询最终结果并将结果返回给客户端,而中间的所有查询请求都由本地D…

LabVIEW空间相机测控系统

空间相机是遥感技术中的核心设备,其在太空中的性能对任务的成功至关重要。为了确保空间相机能够在极端环境下稳定工作,地面模拟测试成为必不可少的环节。LabVIEW开发的空间相机测控系统,通过对温度、应力和应变等参数进行高精度测量&#xff…

云贝教育 |【技术文章】OpenTenBase_V2.6基于麒麟V10源码编译安装

本文为云贝教育 刘老师 原创,请尊重知识产权,转发请注明出处,不接受任何抄袭、演绎和未经注明出处的转载。 前言:什么是OpenTenBase OpenTenBase 是一个提供写可靠性,多主节点数据同步的关系数据库集群平台。你可以…

LabVIEW智能可变温循环PCT测试系统

随着全球能源危机的加剧和环境保护需求的提升,开发和利用清洁能源已成为全球必然趋势。氢能作为一种高效的替代能源,正逐步受到关注。然而,储氢技术的研究至关重要,尤其是储氢材料的PCT(Pressure-Composition-Temperat…

Python数据分析库pandas高级接口dt的使用

文章目录 Pandas介绍使用示例dt.date()Pandas介绍 Pandas是一个强大的数据分析库,其中dt是Pandas的一个高级接口,用于处理日期和时间数据。dt提供了许多实用的方法和属性,可以轻松地处理日期和时间。 使用示例 下面是一些常用的dt方法和属性的使用示例: 获取日期和时间组…

iTOP-3A5000主控板龙芯自主指令系统外加机箱就是一台电脑主机

性能强采用全国产龙芯3A5000处理器,基于龙芯自主指令系统 (LoongArch)的LA464微结构,并进一步提升频率,降低功耗,优化性能。桥片采用龙芯 7A2000,支持PCIE 3.0、USB 3.0和 SATA 3.0.显示接口2 路、HDMI 和1路 VGA&…

sql数据库命令行操作(数据库的增删改查)

查询数据库 查询电脑里面所有数据库 SHOW DATABASES;查询当前所处的数据库 SELECT DATABASE();应用场景:当我使用了USE命令后不知道自己所在哪个数据库时,可以使用这个命令查询自己所在数据库 创建数据库 创建 CREATE DATABASE [IF NOT EXISTS] 数据…