MYSQL 连接

编程入门 行业动态 更新时间:2024-10-13 14:28:42

<a href=https://www.elefans.com/category/jswz/34/1771279.html style=MYSQL 连接"/>

MYSQL 连接

高频 SQL 50 题(基础版) - 学习计划 - 力扣(LeetCode)全球极客挚爱的技术成长平台

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

SELECT COALESCE(unique_id, NULL) AS unique_id,name
FROM Employees
LEFT JOIN EmployeeUNI ON  Employees.id = EmployeeUNI.id;

左连接(Left Join)是一种用于联接两个或多个表的操作,它返回左表中的所有行以及与右表中满足联接条件的匹配行。如果右表中没有与左表匹配的行,则对应的结果列将填充为 NULL 值。

左连接的语法如下:

SELECT 列名
FROM 左表
LEFT JOIN 右表 ON 连接条件;

1068. 产品销售分析 I

SELECT P.product_name,year,price
FROM Sales S
LEFT JOIN  Product P ON P.product_id = S.product_id;

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

SELECT customer_id,COUNT(customer_id) AS count_no_trans
FROM Visits V
LEFT JOIN Transactions T ON T.visit_id = V.visit_id 
WHERE transaction_id IS NULL
GROUP BY customer_id

197. 上升的温度

TIMESTAMPDIFF函数,小的日期前面

类似笛卡尔积的做法

SELECT w1.id Id
FROM Weather AS w1,Weather AS w2
WHERE TIMESTAMPDIFF(DAY,w2.RecordDate,w1.RecordDate) = 1 AND w1.Temperature > w2.Temperature;

DATE_ADD(w2.RecordDate, INTERVAL 1 DAY)是一个日期函数,在给定的日期上添加指定的时

如果w2.RecordDate的值是'2023-10-17',那么DATE_ADD(w2.RecordDate, INTERVAL 1 DAY)将返回'2023-10-18'。

连接后的表如下(左w1,右w2):

 

SELECT w1.id Id
FROM Weather w1
LEFT JOIN(SELECT RecordDate,TemperatureFROM Weather
)w2
ON w1.RecordDate = DATE_ADD(w2.RecordDate,INTERVAL 1 day)
WHERE w1.Temperature > w2.Temperature

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

子查询的表如下

 SUM(time):算出来总运行时间

(COUNT(*)/2):一个进程包括start和end两个时间戳,所以要除以2

SELECT machine_id,ROUND(SUM(time)/(COUNT(*)/2),3) processing_time
FROM (SELECT machine_id,process_id,IF(activity_type = 'start', round(-`timestamp`, 3), round(`timestamp` , 3)) timeFROM Activity 
)t
GROUP BY machine_id;

577. 员工奖金

SELECT name,bonus
FROM (SELECT name,bonusFROM Employee ELEFT JOIN Bonus B ON E.empId = B.empId
) t
WHERE bonus < '1000' OR bonus IS NULL;

1280. 学生们参加各科测试的次数

    SELECT student_id, subject_name, COUNT(*) AS attended_examsFROM ExaminationsGROUP BY student_id, subject_name

直接统计Examinations表

SELECT *
FROMStudents s
CROSS JOINSubjects sub

用交叉连接CORSS JOIN将两张表连接

把成绩表左连接到做了自然连接的表,保证每个学生各门课字段都在,不会因为没参加考试就不算

SELECT stu.student_id,stu.student_name,s.subject_name,IFNULL(grouped.attended_exams,0) AS attended_exams
FROM Students stu 
CROSS JOIN Subjects s 
LEFT JOIN(SELECT student_id, subject_name, COUNT(*) AS attended_examsFROM ExaminationsGROUP BY student_id, subject_name
)grouped
ON grouped.student_id = stu.student_id AND grouped.subject_name = s.subject_name
ORDER BY stu.student_id,s.subject_name

570. 至少有5名直接下属的经理

SELECT name
FROM Employee
WHERE id IN (SELECT managerIdFROM EmployeeGROUP BY managerId HAVING COUNT(*) >= 5
) 

1934. 确认率

SELECT sign.user_id,IFNULL(ROUND(hit/total,2),0.00) confirmation_rate
FROM Signups sign
LEFT JOIN(SELECT user_id,time_stamp,COUNT(action) totalFROM ConfirmationsGROUP BY user_id 
)grouped 
ON grouped.user_id = sign.user_id
LEFT JOIN(SELECT user_id,COUNT(action) hitFROM ConfirmationsWHERE action = 'confirmed'GROUP BY user_id 
)hitcount
ON hitcount.user_id = sign.user_id

 

更多推荐

MYSQL 连接

本文发布于:2023-12-08 12:50:07,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1672844.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:MYSQL

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!