【SQL题解】力扣高频 SQL 50题|DAY4

SQL刷题记录

明天考数据库概论,今天晚上刷几道常考的连接题巩固一下

以下皆出自力扣高频SQL50题

文章目录

25.12.23

1378

1378. 使用唯一标识码替换员工ID

"展示每位用户的 唯一标识码(unique ID );如果某位员工没有唯一标识码,使用 null 填充"由此可知:

需要用到左外连接,左表是Employees

sql 复制代码
select unique_id,name 
from Employees a 
left join EmployeeUNI b 
on a.id = b.id;

1068

1068. 产品销售分析 I

简答的内连接

sql 复制代码
select p.product_name,s.year,s.price 
from Sales s 
join Product p 
on s.product_id = p.product_id; 

要给列名加前缀,不加可能会超时

方面 不加前缀(如 product_name 加前缀(如 p.product_name
正确性 可能出错(字段重名时) 安全明确
可读性 较差 清晰直观
执行效率 几乎无差别 几乎无差别(解析阶段略优)
工程规范 不推荐 强烈推荐

1581

1581. 进店却未进行过交易的顾客

  1. 先用左外连接,得到vistits表中每个customer_id对应的transaction_id,连接条件是两表的visit_id相等
  2. where transaction_id is null筛选出没有进行交易的
  3. 给筛选后的表用group by按照customer_id进行分组,并用count求出每组的个数
sql 复制代码
select customer_id,count(*) as count_no_trans
from Visits
left join Transactions
on Visits.visit_id = Transactions.visit_id
where transaction_id is null
group by customer_id;

197

197. 上升的温度

sql 复制代码
select w1.id as id 
from Weather w1,Weather w2 
where datediff(w1.recordDate,w2.recordDate) = 1 
and w1.Temperature > w2.Temperature;

from Weather w1,Weather w2

  • Weather 表和自己做笛卡尔积(隐式连接),生成所有可能的 (w1, w2) 记录对。
  • w1 代表"当前天",w2 代表"对比的另一天"

datediff(w1.recordDate,w2.recordDate) = 1筛选"相邻两天

DATEDIFF 是 SQL 中用于计算两个日期之间相差天数的函数

返回 date1 - date2 的整数天数差(只考虑日期部分,忽略时间)

w1.Temperature > w2.Temperature筛选温度升高

1661

1661. 每台机器的进程平均运行时间

sql 复制代码
select a1.machine_id as 'machine_id',
    ROUND(AVG(a2.timestamp - a1.timestamp) 
        ,3) as 'processing_time'
from Activity as a1
    join Activity as a2
    on a1.machine_id = a2.machine_id
        and a1.process_id = a2.process_id  
        and a1.activity_type = 'start' 
        and a2.activity_type = 'end'
group by a1.machine_id;

1 .FROM Activity AS a1 JOIN Activity AS a2自连接

  • Activity 表与自身连接,生成所有可能的记录对 (a1, a2)

2.连接条件

sql 复制代码
a1.machine_id = a2.machine_id
        and a1.process_id = a2.process_id  
        and a1.activity_type = 'start' 
        and a2.activity_type = 'end'

这四个条件确保:

  1. 同一台机器machine_id 相同)
  2. 同一个任务process_id 相同)
  3. a1 是开始事件activity_type = 'start'
  4. a2 是结束事件activity_type = 'end'

3.计算处理时间

a2.timestamp - a1.timestamp

4.按机器分组并求平均

sql 复制代码
GROUP BY a1.machine_id
  • 将同一台机器的所有任务处理时间聚合在一起。
  • AVG(...) 计算该机器所有任务的平均处理时间

5.保留三位小数

sql 复制代码
ROUND(AVG(...), 3)
相关推荐
rchmin几秒前
向量数据库Milvus安装及使用实战经验分享
数据库·milvus
小旭95271 分钟前
Spring Security 实现权限控制(认证 + 授权全流程)
java·后端·spring
weixin_408099672 分钟前
【完整教程】天诺脚本如何调用 OCR 文字识别 API?自动识别屏幕文字实战(附代码)
前端·人工智能·后端·ocr·api·天诺脚本·自动识别文字脚本
ego.iblacat6 分钟前
Python 连接 MySQL 数据库
数据库·python·mysql
金銀銅鐵8 分钟前
[Java] 如何通过 cglib 的 FastClass 调用一个类中的“任意”方法?
java·后端
祖传F8717 分钟前
quickbi数据集数据查询时间字段显示正确,仪表板不显示
数据库·sql·阿里云
Leon-Ning Liu37 分钟前
Oracle 26ai新特性:时区、表空间、审计方面的新特性
数据库·oracle
宠友信息38 分钟前
一套基于uniapp+springboot完整社区系统是如何实现的?友猫社区源码级功能解析
java·spring boot·后端·微服务·微信·uni-app
悟道子HD43 分钟前
SRC漏洞挖掘——2.SQL注入漏洞实战详解
sql·web安全·网络安全·渗透测试·sql注入·sqlmap·暴力破解
humors2211 小时前
各厂商工具包网址
java·数据库·python·华为·sdk·苹果·工具包