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

embedded/2024/10/21 3:25:38/

今天三道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.ppmy.cn/embedded/126648.html

相关文章

R语言:ERGM指数随机图模型3:faux.mesa.high数据集

文章目录 加载数据集可视化网络有向联系。加载数据集 节点协变量:同质性。让我们尝试一个更大的网络,一个基于“青少年健康追踪研究(AddHealth)”中一所学校的模拟相互友谊网络。在这里,我们将通过年级和种族来研究友谊中的同质性。两者都是离散属性,所以我们使用 ERGM …

提升邮件营销设计精准度秘诀,效率与效果实践

邮件营销通过确定目标群体、数据分析、邮件设计、测试优化、保持频率时效性及结合其他渠道实现精准营销,提高市场效益。ZohoCampaigns集成CRM、自动化功能和客户细分提升效果。 1、确定目标群体 精准营销的第一步是了解并确定你的目标群体。标定目标群体包括年龄、…

C++11 新特性 学习笔记

C11 新特性 | 侯捷C11学习笔记 笔者作为侯捷C11新特性课程的笔记进行记录,供自己查阅方便 文章目录 C11 新特性 | 侯捷C11学习笔记1.Variadic TemplatesC11支持函数模板的默认模板参数C11在函数模板和类模板中使用可变参数 可变参数模板1) 可变参数函数模板2) 可变…

无人机之视觉技术篇

一、视觉传感器的类型 摄像头: 最常见的视觉传感器,能够捕捉可见光图像和视频。 通过单目、双目或多目摄像头的组合,无人机能够实现立体视觉,从而估算距离、深度,并进行物体识别和追踪。 红外传感器: …

springboot项目通过maven的profile功能实现通过不同文件夹的方式来组织不同环境配置文件

写在前面 本文看下springboot项目如何通过文件夹的方式来组织不同环境配置文件。 1:正文 一般的我们写springboot项目时配置文件是这个样子的: appliction.yaml --> 通过spring.profiles.activexxx来激活某个指定后缀的配置文件 application-evn1…

【通过zip方式安装mysql服务】

通过zip方式安装mysql服务 Mysql安装包下载mysql安装及环境配置1.解压缩配置环境变量初始化mysql配置安装mysql服务启动MySQL服务连接mysql修改root用户密码 Mysql安装包下载 通过访问mysql官网下载:mysql下载地址 mysql安装及环境配置 1.解压缩 下载完成后&am…

P8635 [蓝桥杯 2016 省 AB] 四平方和

对于一个给定的正整数&#xff0c;可能存在多种平方和的表示法。 要求你对 44个数排序使得 0≤a≤b≤c≤d。 输入 #1复制 5 输出 #1 0 0 1 2 输入 #2 12 输出 #2 0 2 2 2 输入 #3 773535 输出 #3 1 1 267 838 代码 #include<bits/stdc.h> using namespace …

谷歌NotebookLM的成功之道:从概念到病毒式传播的AI产品之旅

在短短两个月内,谷歌的一个小型团队成功构建并发布了NotebookLM的“音频概览”功能,这一创新迅速在网络上引起了轰动。这不仅证明了小而灵活的团队可以在大型组织内部实现快速迭代和重大影响,同时也为其他GenAI产品创业者提供了宝贵的经验教训。以下是该团队负责人分享的产品…