自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(37)
  • 收藏
  • 关注

原创 每天一个sql优化小技巧

2025-04-27 21:35:32 108

原创 SQL,力扣题目1635,Hopper 公司查询 I

该表的每一行均包含行程ID(ride_id),用户ID(user_id)以及该行程的日期(requested_at)。2、日期函数year()、month(),聚合函数count()、max()该表的每一行均包含驾驶员的ID以及他们加入Hopper公司的日期。driver_id 是该表的主键(具有唯一值的列)。ride_id 是该表的主键(具有唯一值的列)。ride_id 是该表的主键(具有唯一值的列)。表中的行程信息都在“Rides”表中存在。该表的每一行都包含已接受的行程信息。升序排列的结果表,其中。

2024-11-22 20:09:53 1111

原创 SQL,力扣题目1565,按月统计订单数与顾客数与date_format()函数

1、date_format()函数,本题使用date_format(date, '%Y-%m'),精确到月。2、date_format(date, '%Y-%m-%d %H:%i:%s'),精确到秒。这张表包含顾客(customer_id)所下订单的信息。order_id 是该表具有唯一值的列。3、%%,表示把百分比字符%添加到输出。统计金额(invoice)查询结果无排序要求。1、思路就是分组聚合。

2024-11-20 15:15:37 373

原创 SQL,力扣题目1369,获取最近第二次的活动

名为 username 的用户在 startDate 到 endDate 日内有一次活动。2、思路:以第一次的活动为基础来取第二次的,不存在第二次的活动就取第一次的。1、CTE表达式 + 排名函数 + left join。该表包含每个用户在一段时间内进行的活动的信息。3、取最近第二次的活动,没有就取第一天的活动。一个用户不能同时进行超过一项活动,以。如果用户仅有一次活动,返回该活动。1、按用户分组,起始日期倒序排名。编写解决方案展示每一位用户。

2024-11-18 15:00:02 561

原创 SQL,力扣题目1336,每次访问的交易次数

可以保证用户 (user) 在 transaction_date 访问了银行 (也就是说 Visits 表包含 (user_id, transaction_date) 行)2、根据用户、访问日期以及交易日期维度,计算交易次数和客户数量,这一步需要同时计算出0到最大交易次数之间的区间值。银行想要得到银行客户在一次访问时的交易次数和相应的在一次访问时该交易次数的客户数量的图表。(user_id, visit_date) 是该表的主键(具有唯一值的列的组合)3、这里用递归计算出的值左连接下面的表。

2024-11-16 08:54:48 981

原创 SQL,力扣题目1126,查询活跃业务

(business_id, event_type) 是这个表的主键(具有唯一值的列的组合)。表中的每一行记录了某种类型的事件在某些业务中多次发生的信息。1、CTE表达式 + 窗口函数 + group by。1、窗口函数计算平均活动次数,不影响原字段。2、筛选有多种类型大于平均活动次数的记录。的具有该事件的所有公司的。写一个解决方案,找到所有。该事件的平均活动次数。

2024-11-15 12:41:51 671

原创 SQL,力扣题目1107,每日新用户统计

activity 列是 ENUM 类型,可能取 ('login', 'logout', 'jobs', 'groups', 'homepage') 几个值之一。编写解决方案,找出从今天起最多 90 天内,每个日期该日期首次登录的用户数。2、思路:找出每个用户第一天登录的日期之后再进行过滤90天以内的日期。2、找出第一天登录日期与指定日期间隔90天以内的日期,并计算人数。1、CTE表达式 + 窗口函数 + datediff()1、找出用户第一天登录的日期。该表可能有重复的行。

2024-11-13 11:37:20 545 1

原创 SQL,力扣题目1194,锦标赛优胜者

first_score 和 second_score 分别表示 first_player 和 second_player 的得分。每一行是一场比赛的记录,first_player 和 second_player 表示该场比赛的球员 ID。2、题目要求找出组内所有成员的累计分数,与matches表的胜负无关。player_id 是此表的主键(具有唯一值的列)。match_id 是此表的主键(具有唯一值的列)。每组的获胜者是在组内累积得分最高的选手。此表的每一行表示每个玩家的组。

2024-11-11 20:28:10 847

原创 SQL,力扣题目1159,市场分析 II

编写一个解决方案,为每个用户找出他们出售的第二件商品(按日期)的品牌是否是他们最喜欢的品牌。如果用户售出的商品少于两件,则该用户的结果为否。item_id 是 Items 表的外键(reference 列)。buyer_id 和 seller_id 是 Users 表的外键。order_id 是该表的主键(具有唯一值的列)。3、用户喜欢的商品和卖出的第2个商品相同的即为所求。user_id 是该表的主键(具有唯一值的列)。item_id 是该表的主键(具有唯一值的列)。1、找到用户卖出的第2个商品。

2024-11-10 17:22:38 1070

原创 SQL,力扣题目1127, 用户购买平台

这张表记录了用户在一个在线购物网站的支出历史,该在线购物平台同时拥有桌面端('desktop')和手机端('mobile')的应用程序。(user_id, spend_date, platform) 是这张表的主键(具有唯一值的列的组合)。平台列 platform 是一种 ENUM ,类型为('desktop', 'mobile')。1、手机端、桌面端、手机和桌面端用户情况汇总。使用桌面端和手机端的用户人数和总支出金额。2、列出所有平台以及所有用户每天的使用情况。编写解决方案找出每天。

2024-11-09 19:36:58 466

原创 SQL,力扣题目618,学生地理信息报告

测试用例的生成保证来自美国的学生人数不少于亚洲或欧洲的学生人数。编写解决方案实现对大洲(continent)列的。该表的每一行表示学生的名字和他们来自的大陆。依次排列在对应的大洲下面。一所学校有来自亚洲、欧洲和美洲的学生。1、添加排序字段作为分组字段。1、典型的行转列,分组解法。该表可能包含重复的行。

2024-11-08 20:05:21 673

原创 SQL,力扣题目571, 给定数字的频率查询中位数

1、为求中位数做准备,按num排序,找出中间的频率值对应的num。1、CTE表达式 + 移动窗口 + 场景分析 + 中位数算法。这张表的每一行表示某个数字在该数据库中的出现频率。是将数据样本中半数较高值和半数较低值分隔开的值。2、num个数为偶数或奇数情况下分析中位数的取值。num 是这张表的主键(具有唯一值的列)。表,报告数据库中所有数字的。2、分析多种场景下的算法。

2024-11-07 19:52:26 512

原创 SQL,力扣题目569,员工薪水中位数

2、中位数字段升序和降序的排名相同或者差值为1。id 是该表的主键列(具有唯一值的列)。编写解决方案,找出每个公司的工资中位数。该表的每一行表示公司和一名员工的工资。2、找出中位数所在行,列出结果字段。1、CTE表达式 + 排名函数。

2024-11-06 10:57:21 601

原创 SQL,力扣题目262,行程和用户

这张表中存所有用户,每个用户都有一个唯一的 users_id ,role 是一个表示用户身份的枚举类型,枚举成员为 (‘client’, ‘driver’, ‘partner’)。status 是一个表示行程状态的枚举类型,枚举成员为(‘completed’, ‘cancelled_by_driver’, ‘cancelled_by_client’)。的计算方式如下:(被司机或乘客取消的非禁止用户生成的订单数量) / (非禁止用户生成的订单总数)。users_id 是这张表的主键(具有唯一值的列)。

2024-11-05 18:24:42 1148 1

原创 SQL,力扣题目1709,访问日期之间最大的空档期

求出每次访问及其下一个访问(若该次访问是最后一次,则为今天)之间最大的空档期天数。1、增加行记录 + union + 窗口函数 + group by。2、MySQL中union/union all 用法。该表包含用户访问某特定零售商的日期日志。1、给每个用户增加一行记录,分组排序。该表没有主键,它可能有重复的行。编写解决方案,对于每个。返回结果表,按用户编号。

2024-11-04 20:27:32 604

原创 SQL,力扣题目1596,每位顾客最经常订购的商品【窗口函数】

2、注意group by 分组后select 后只能是分组字段和聚合函数。1、CTE表达式 + rank() + count() + 子查询。该表包含顾客 customer_id 的订单信息。写一个解决方案,找到每一个顾客最经常订购的商品。customer_id 是该表具有唯一值的列。product_id 是该表具有唯一值的列。order_id 是该表具有唯一值的列。没有顾客会在一天内订购相同的商品。, 他最经常订购的商品的。该表包含了所有商品的信息。2、排名为1即为最常订购。该表包含所有顾客的信息。

2024-11-03 16:34:15 1013

原创 SQL,力扣题目1225,报告系统状态的连续日期【窗口函数】

即如果任务失败了,就是失败状态的起止日期,如果任务成功了,就是成功状态的起止日期。2、过滤 -> 新增一列 -> 拼接 -> 排名函数 -> 分组 -> 求最小/大值。每个任务都独立于先前的任务。任务的状态可以是失败或是成功。该表主键为 success_date (具有唯一值的列)。该表主键为 fail_date (具有唯一值的列)。4、计算最小/最大值即为起始/结束日期。该表包含失败任务的天数.该表包含成功任务的天数.最后结果按照起始日期。2、拼接两个状态的数据。3、差值相等的即为连续。

2024-11-02 22:49:41 611

原创 SQL,力扣题目1767,寻找没有被执行的任务对【递归】

task_id 表示的为主任务的id,每一个task_id被分为了多个子任务(subtasks),subtasks_count表示为子任务的个数(n),它的值表示了子任务的索引从1到n。编写解决方案报告没有被执行的(主任务,子任务)对,即没有被执行的(task_id, subtask_id)。每一行表示标记为task_id的主任务与标记为subtask_id的子任务被成功执行。,对于每一个task_id,subtask_id

2024-11-01 20:00:15 813

原创 SQL,力扣题目1285,找到连续区间的开始和结束数字【窗口函数】

2、针对排名后数据,计算差值找到连续数字,根据差值分组给组内成员进行排名,根据差值和组内成员总数分组,排名最小的为起始值,排名最大的为结束值。2、这里计算排名的最大值也可以使用窗口函数,不过order by 后面的字段为倒序。4、count(1) 用来计算总数,数据量大的情况下效率较高。3、流程控制,排名最小的为起始值,排名最大的为结束值。上表的每一行包含日志表中的一个 ID。表中的连续区间的开始数字和结束数字。1、窗口函数的连续问题,使用差值法。id 是上表具有唯一值的列。

2024-10-31 20:00:26 600

原创 SQL,力扣题目1412,查找成绩处于中游的学生

成绩处于中游的学生是指至少参加了一次测验, 且得分既不是最高分也不是最低分的学生。(exam_id, student_id) 是该表主键(具有唯一值的列的组合)。3、注意是所有测验都没有取得最高分和最低分,所以不能直接组内剔除最高分和最低分。学生 student_id 在测验 exam_id 中得分为 score。1、每个测验都要找出最高分和最低分,整体排除这些学生,题目是考虑并列的。student_id 是该表主键(具有唯一值的列)。student_name 学生名字。不要返回从来没有参加过测验的学生。

2024-10-30 16:13:05 800

原创 SQL,力扣题目1549,每件商品的最新订单【窗口函数】

写一个解决方案, 找到每件商品的最新订单(可能有多个).该表包含消费者customer_id产生的订单.3、CTE 表达式 + 排名函数 + 子查询。1、最新订单为日期最晚的订单,需要降序。customer_id 是该表主键.不会有商品被相同的用户在一天内下单。product_id 是该表主键.排列. 如果还有排序相同, 再以。order_id 是该表主键., 如果有排序相同, 再以。2、选择排序为1的即为最新。该表包含所有商品的信息.1、求最值,可以考虑排序。该表包含消费者的信息.

2024-10-30 15:10:31 766

原创 SQL,力扣题目184,部门工资最高的员工【窗口函数】

1、窗口函数的排名函数,rank() 并列不连续,dense_rank() 并列连续,row_numbere() 不并列连续,一般和order by 一起使用。2、select 和 from 后的子查询比较常用,select 后一般是单行子查询。此表的每一行都表示员工的 id、姓名和工资。此表的每一行都表示一个部门的 id 及其名称。在 SQL 中,id 是此表的主键列。在 SQL 中,id是此表的主键。查找出每个部门中薪资最高的员工。1、按部门给员工的薪资降序排序。2、薪资最高的为排序为1的。

2024-10-30 12:13:22 447

原创 SQL,力扣题目1747,应该被禁止的 Leetflex 账户

2、登入和等出的记录纵向拼接,按账户、网址、日期(day)分组求时间的最值后(同一天在同一网址登录的可能会存在重复数据,根据题意这里不应该+1),时间与最大最小值相等的过滤出来,对辅助列进行累加。3、窗口函数使用聚合函数时不应该使用order by,会变成移动窗口,而不是对组内全体数据聚合,或者根据情况进行选择。该表包含有关Leetflex帐户的登录和注销日期的信息。它还包含了该账户用于登录和注销的网络地址的信息。如果某个帐户在某一时刻从两个不同的网络地址登录了,则这个帐户应该被禁止。该表可能包含重复项。

2024-10-30 11:46:22 870

原创 SQL,力扣题目1783,大满贯数量

编写解决方案,找出每一个球员赢得大满贯比赛的次数。结果不包含没有赢得比赛的球员的ID。1、计算所有字段不同player_id的个数,选择union all 方法。2、select 后的子查询通过where 条件进行连接,返回单个值。该表的每一行都包含在每场大满贯网球比赛中赢得比赛的球员的 ID。player_id 是这个表的主键(具有唯一值的列)这个表的每一行给出一个网球运动员的 ID 和 姓名。2、根据新表进行分组聚合,子查询查找球员姓名。year 是这个表的主键(具有唯一值的列)

2024-10-30 10:20:58 584

原创 SQL,力扣题目534,游戏玩法分析 III

2、窗口函数的结构:聚合函数/排名函数/分析函数 + over(partiton by 分组字段 order by排序字段)每一行是一个玩家的记录,他在某一天使用某个设备注销之前登录并玩了很多游戏(可能是 0 )。也就是说,玩家在该日期之前所玩的游戏总数。(player_id,event_date)是此表的主键(具有唯一值的列)。1、窗口函数分组排序后累计求和使用sum() 函数,括号里面为需要求和的字段。1、根据分析可以使用窗口函数,不影响原有的字段。这张表显示了某些游戏的玩家的活动情况。

2024-10-29 20:28:46 294

原创 SQL,力扣题目608,树节点

3、初始化SQL 添加'Root' 类型,需要使用cast() 函数进行强制类型转换,不能直接写'Root'2、写递归时,临时表名后面需要在括号里写好参数,与select 后面的字段一一对应。1、MySQL 使用递归时需要加上recursive 关键字。该表的每行包含树中节点的 id 及其父节点的 id 信息。编写一个解决方案来报告树中每个节点的类型。id 是该表中具有唯一值的列。1、根据题意可以采用递归的方法。给定的结构总是一个有效的树。

2024-10-29 20:04:24 446

原创 SQL,力扣题目1699,两人之间的通话次数

2、使用group by 分组后,count() 和sum() 聚合求次数和通话时长。该表包含 from_id 与 to_id 间的一次电话的时长。该表没有主键(具有唯一值的列),它可能包含重复项。2、按照from_id 和to_id 两个字段分组。1、使用if() 函数判断交换两个字段的位置。1、判断from_id 是否大于to_id。之间的通话次数和通话总时长,其中。编写解决方案,统计每一对用户。

2024-10-28 19:36:38 553

原创 SQL,力扣题目3220,奇数和偶数交易

2、% 求余数,余数等于0为偶数,等于1为奇数,还可以使用函数mod()transactions_id 列唯一标识了表中的每一行。3、ifnull() 判断是否为空,为空可以显示为指定值。这张表的每一行包含交易 id,金额总和和交易日期。4、MySQL 给字段起别名,as 可以省略不写。1、根据题意,奇数为一列,偶数为一列,为行转列。1、group by 分组,sum() 聚合。如果某天没有奇数或偶数交易,显示为。2、计算结果,order by 排序。编写一个解决方案来查找每天。

2024-10-27 21:51:28 533

原创 SQL,力扣题目1501,可以放心投资的国家

电话号码的格式是:'xxx-yyyyyyy', 其中 xxx 是国家码(3 个字符), yyyyyyy 是电话号码(7 个字符), x 和 y 都表示数字. 同时, 国家码和电话号码都可以包含前导 0.该公司想要投资的国家是: 该国的平均通话时长要严格地大于全球平均通话时长。该表每一行包含国家名和国家码. country_code 的格式是'xxx', x 是数字.3、通话双方的通话时长拼接在一起,按照国家分组,计算平均数并与全球平均通话时长进行比较。country_code 是该表具有唯一值的列.

2024-10-26 11:38:41 581

原创 SQL,力扣题目1264,页面推荐

1、找出user_id为1用户的朋友,包括user1_id为1 以及user2_id为1的朋友关系。2、找出user_id 为1用户朋友喜欢的页面推荐给1用户,排除1用户已经喜欢的页面。这张表的每一行代表着 user1_id 和 user2_id 之间存在着朋友关系。(user1_id, user2_id) 是这张表具有唯一值的列的组合。= 1 的用户,推荐其朋友们喜欢的页面。(user_id, page_id) 是这张表具有唯一值的列的组合。这张表的每一行代表着 user_id 喜欢 page_id。

2024-10-25 21:16:42 384

原创 数据库,力扣题目1270,向公司 CEO 汇报工作的所有人

这个表中每一行中,employee_id 表示职工的 ID,employee_name 表示职工的名字,manager_id 表示该职工汇报工作的直线经理。2、递归的语法MySQL和Oracle的区别,MySQL必须使用关键字recursive,选择使用union all 或者union。编写解决方案,找出所有直接或间接向公司 CEO 汇报工作的职工的。这个公司 CEO 是 employee_id = 1 的人。1、找出直接向CEO汇报的人,排除自己。2、找出间接向CEO汇报的人。返回无重复项的结果。

2024-10-24 21:22:06 431

原创 PLSQL,用水吨数 12 吨,业主类型为 1,计算阶梯水费

5、for 循环的结构:for 变量 in ... loop end loop;编写 PL/SQL,用水吨数 12 吨,业主类型为 1,计算阶梯水费。6、if 条件判断语法:if... then...;1、PLSQL语法结构declare begin end;7、打印结果 dbms_output.put_line()4、for 循环简化PLSQL 变量和赋值。2、引用变量表名.列名%type。1、过滤业主类型为1的数据。2、分析用水量为12的情况。3、使用游标提取行记录。

2024-10-24 21:02:51 281

原创 数据库,力扣题目1445,报告每一天 苹果 和 桔子 销售的数目的差异

2、case when 不写else,默认为null,sum 函数会忽略null 值。(sale_date, fruit) 是该表主键(具有唯一值的列的组合)。3、使用to_char() 函数格式化日期,order by 用来排序。返回的结果表, 按照格式为 ('YYYY-MM-DD') 的。该表包含了每一天中"苹果" 和 "桔子"的销售情况。1、行转列,使用分组聚合,再计算差值。2、根据需求选取字段,并排序。1、行转列,分组聚合的方法。编写解决方案报告每一天。

2024-10-23 15:56:08 464 1

原创 数据库,力扣题目1212,计算球队得分

比赛的主客队分别由它们自己的 id 表示,他们的进球由 host_goals 和 guest_goals 分别表示。4、left join 左连接,会保留左表所有的内容,右表匹配不上的显示为null。1、case when 进行条件判断,满足条件的得出一个结果。3、把比赛双方的得分进行纵向拼接,并根据球队分组计算总得分。3、左连接查找球队名称,并排序,注意未参加比赛的计算为0分。match_id 是该表具有唯一值的列。team_id 是该表具有唯一值的列。表中的每一行都代表一场已结束的比赛。

2024-10-23 15:28:11 977

原创 数据库,力扣题目1440,计算布尔表达式的值

在 SQL 中,(left_operand, operator, right_operand) 是该表主键.left_operand 和 right_operand 的值保证存在于 Variables 表单中.operator 是枚举类型, 取值于('<', '>', '=')1、使用子查询分别计算出左侧和右侧变量的值。4、if 条件语句,根据返回的结果进行赋值。在 SQL 中,name 是该表主键.该表包含了存储的变量及其对应的值.该表包含了需要计算的布尔表达式.1、根据变量的值计算结果。

2024-10-23 15:11:01 657

原创 数据库,力扣题目1112,每位学生获得的最高成绩

(student_id, course_id) 是该表的主键(具有唯一值的列的组合)。编写解决方案,找出每位学生获得的最高成绩和它所对应的科目,若科目成绩并列,取。2、排名函数考虑并列,可以使用rank(), dense_rank()1、按分数排名,使用排名函数rank()3、简便解法是可以根据两个字段进行排名。2、选取排名为1的,课程id最小的。1、使用窗口函数over()开窗。grade 不会为 NULL。

2024-10-23 14:52:29 345

原创 数据库,力扣题目1398,购买了产品 A,B 但没有购买产品 C 的客户

的客户的 customer_id 和 customer_name,因为我们想推荐他们购买这样的产品。customer_id 是购买了名为 "product_name" 产品顾客的id。2、Like 模糊查询,'%'代表任意数量的字符,'_'下划线表示单个字符。2、查找包含A和B,但不包含C的行(同时购买产品A和B)customer_id 是这张表中具有唯一值的列。1、纵向拼接需要使用Group_Concat 方法。order_id 是这张表中具有唯一值的列。customer_name 是顾客的名称。

2024-10-23 11:48:16 408

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除