1141. 查询近30天活跃用户数
1141. 查询近30天活跃用户数 难度:简单 | 题号:1141 | 链接:1141. 查询近30天活跃用户数 - 力扣(LeetCode) | 数据结构:SQL 关联:订单最多的用户(同为「按维度分组计数」)· 每月交易 I(同为日期函数 + 分组聚合)· 可对照 SQL原理_02(日期函数 / 分组聚合)。 🎯 问题描述 描述:写一条 SQL 查询,求出截至 2019-07-27(含)的近 30 天内,每天的活跃用户数。活跃用户指当天至少进行一次活动的用户,返回结果表的列名须为 day 和 active_users,且每天都可能出现重复用户(同一用户一天多次活动只算一次)。 表:Activity 1234567891011+---------------+---------+| Column Name | Type |+---------------+---------+| user_id | int || session_id | int || activity_date | date || activity_t...
1193. 每月交易 I
1193. 每月交易 I 难度:中等 | 题号:1193 | 链接:1193. 每月交易 I - 力扣(LeetCode) | 数据结构:SQL 关联:查询近30天活跃用户数(同为日期函数 + 分组聚合)· 订单最多的用户(分组计数)· 可对照 SQL原理_02(日期格式化 / 条件聚合)。 🎯 问题描述 描述:写一条 SQL 查询,找出每个月、每个国家/地区的:① 交易总数;② 交易总金额;③ 已批准(state = 'approved')的交易数;④ 已批准交易的总额。结果以任意顺序返回。 表:Transactions 123456789101112+---------------+---------+| Column Name | Type |+---------------+---------+| id | int || country | varchar || state | enum || amount | int || trans_date | date ...
1341. 电影评分
1341. 电影评分 难度:中等 | 题号:1341 | 链接:1341. 电影评分 - 力扣(LeetCode) | 数据结构:SQL 关联:订单最多的用户(同为「分组计数取 Top-1」)· 分数排名(同为「排名 / 并列处理」)· 部门工资最高的员工(分组最值)· 可对照 SQL原理_02(多表连接 / 排序 / UNION ALL)。 🎯 问题描述 描述:写一个解决方案,同时完成两件事: 找出评论电影数量最多的用户名。若并列,返回字典序较小的用户名。 找出 2020 年 2 月里平均评分最高的电影名称。若并列,返回字典序较小的电影名称。 返回结果表的列名为 results。 表:Movies / 表:Users / 表:MovieRating 12345678910+---------------+---------+ +---------------+---------+ +---------------+---------+| Column Name | Type | | Column Name | Type ...
596. 超过5名学生的课
596. 超过5名学生的课 难度:简单 | 题号:596 | 链接:596. 超过 5 名学生的课 - 力扣(LeetCode) | 数据结构:SQL 关联:订单最多的用户(同为「分组计数 + 过滤」)· 查询近30天活跃用户数(分组去重计数)· 可对照 SQL原理_02(GROUP BY / HAVING / WHERE 与 HAVING 的区别)。 🎯 问题描述 描述:查询至少有 5 名学生的所有课程(班级)。结果以任意顺序返回。 表:Courses 12345678+-------------+---------+| Column Name | Type |+-------------+---------+| student | varchar || class | varchar |+-------------+---------+(student, class) 是该表的联合主键(不同值的列的组合)。该表的每一行表示学生的名字和他们注册的课程。 示例 1: 123456789101112131415161718192021222324...
586. 订单最多的用户
586. 订单最多的用户 难度:简单 | 题号:586 | 链接:586. 订单最多的客户 - 力扣(LeetCode) | 数据结构:SQL 关联:从不订购的用户(同用 Orders 表,一文求"从未下单",一文求"下单最多")· 分数排名(同为「分组计数 + 排名」题)· 可对照 SQL原理_03(CTE 写法)与 SQL原理_02(窗口函数)。 🎯 问题描述 描述:查找订单数量最多的客户的 customer_number。测试用例保证订单最多的客户只有一个。 表:Orders 12345678+-----------------+----------+| Column Name | Type |+-----------------+----------+| order_number | int || customer_number | int |+-----------------+----------+order_number 是该表的主键(具有唯一值的列)。该表包含订单 ID 与...
漏斗题
漏斗题 类型:自编场景题(漏斗转化)| 题号:— | 链接:— 关联:SQL原理_04(漏斗章节)· SQL分析场景模板 · 好友申请 II :谁有最多的好友(同为列转行+聚合) 🎯 问题描述 表结构 1event_log(user_id, event_name, event_time) 事件名:view、cart、order、pay。 需求 统计从"浏览 → 加购 → 下单 → 支付"的漏斗人数。 要求每一步必须发生在第一步之后,即按时间顺序: 1view_time < cart_time < order_time < pay_time 输出:view_users、cart_users、order_users、pay_users。 说明:每个用户可能多次触发同一事件,需按最早时间归并成一行再比较顺序。 💻 解题思路 思路1:MIN(CASE WHEN) 归并 + 时间递增计数(用户解法) 核心逻辑 ① 子查询 person_log:按 user_id 分组,用 MIN(CASE WHEN event_name = 'xx'...
删除有序数组中的重复项 -LeetCode
26. 删除有序数组中的重复项 🎯 问题描述(来源于LeetCode) 描述: 给你一个 非严格递增排列 的数组 nums,请你 原地 删除重复出现的元素,使每个元素只出现一次,返回删除后数组的新长度。 元素的相对顺序应该保持一致。 不要使用额外的数组空间,你必须在 原地 修改输入数组,并在使用 O(1) 额外空间的条件下完成。 说明: 数组已排序。 返回新长度 slow 后,不需要考虑数组中超出新长度后面的元素。 示例: 示例 1: 123输入: nums = [1,1,2]输出: 2, nums = [1,2,_]解释: 函数应返回新长度 2,并且原数组的前两个元素被修改为 1, 2。 示例 2: 12输入: nums = [0,0,1,1,1,2,2,3,3,4]输出: 5, nums = [0,1,2,3,4,_,_,_,_,_] 💻 解题思路 思路:快慢指针(覆盖法) 算法步骤 如果数组长度为 0,直接返回 0。但代码中未处理空数组,不过题目保证 nums 长度至少为 1。 初始化慢指针 slow = 1,指向下一个不重复元素应该放置的位置。...
找出数组中的所有 K 近邻下标 -LeetCode
2200. 找出数组中的所有 K 近邻下标 🎯 问题描述(来源于LeetCode) 描述: 给你一个下标从 0 开始的整数数组 nums 和两个整数 key 和 k。 K 近邻下标 定义为 nums 中某个下标 i,满足至少存在一个下标 j 使得 |i - j| <= k 且 nums[j] == key。 以列表形式返回所有 K 近邻下标,按 递增顺序 排序。 说明: 一个下标可能对应多个 key 位置,但只计入一次。 示例: 示例 1: 123输入: nums = [3,4,9,1,3,3], key = 3, k = 2输出: [0,1,2,3,4,5]解释: key 出现在下标 0、4、5,扩展区间 [0,2]、[2,6]、[3,7],覆盖 [0,5]。 示例 2: 123输入: nums = [1,2,3,4,5], key = 2, k = 1输出: [0,1,2]解释: key 在索引 1,区间 [0,2],因此 0、1、2 都是近邻。 💻 解题思路 思路:快慢指针扫描(一次遍历,线性时间) 快指针 fast:遍历数组,寻找值为 ke...
有效三角形的个数-LeetCode
611. 有效三角形的个数 🎯 问题描述(来源于LeetCode) 描述: 给定一个包含非负整数的数组 nums,返回其中可以组成三角形三条边的三元组个数。 三角形的条件是:任意两边之和大于第三边,等价于较短两边之和大于最长边。 说明: 三元组 (i, j, k) 满足 i < j < k,且 nums[i] + nums[j] > nums[k]。 数组长度 1 <= n <= 1000。 示例: 示例 1: 123输入: nums = [2,2,3,4]输出: 3解释: 有效组合: (2,2,3), (2,3,4), (2,3,4) 共 3 个。 示例 2: 12输入: nums = [4,2,3,4]输出: 4 💻 解题思路 思路:排序 + 双指针(固定最短边,滑动中边) 算法步骤 将数组 nums 升序排序。 外层循环 slow 从 0 到 n-3,固定最短边 num = nums[slow]。 如果 num == 0,由于三角形边长必须为正数,直接跳过。 初始化 mid = slow + 1,指向可能的次短边(中...
删除字符串两端相同字符后的最短长度-LeetCode
1750. 删除字符串两端相同字符后的最短长度 🎯 问题描述(来源于LeetCode) 描述: 给你一个只包含字符 'a'、'b' 和 'c' 的字符串 s,你可以执行以下操作任意次: 选择字符串的一个非空前缀和一个非空后缀,要求前缀和后缀的所有字符都相同,且前缀和后缀的字符相同(即 s[0] == s[-1])。然后删除前缀和后缀,剩余部分拼接成新字符串。 求在执行任意次操作后,字符串可能的最短长度。 说明: 每次操作必须同时删除前缀和后缀,且前缀和后缀的字符必须相同。 如果两端字符不同,则无法继续操作,返回当前长度。 示例: 示例 1: 123输入: s = "ca"输出: 2解释: 两端字符 'c' 和 'a' 不同,无法删除,长度为 2。 示例 2: 123456输入: s = "cabaabac"输出: 0解释: 初始: "cabaabac" 两端都为 'c',删除所有 'c' 得到 "abaab...










