• MYSQL 连接


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

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

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

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

    左连接的语法如下:

    1. SELECT 列名
    2. FROM 左表
    3. LEFT JOIN 右表 ON 连接条件;

    1068. 产品销售分析 I

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

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

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

    197. 上升的温度

    TIMESTAMPDIFF函数,小的日期前面

    1. SELECT w1.id Id
    2. FROM Weather AS w1,Weather AS w2
    3. 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):

     

    1. SELECT w1.id Id
    2. FROM Weather w1
    3. LEFT JOIN(
    4. SELECT RecordDate,Temperature
    5. FROM Weather
    6. )w2
    7. ON w1.RecordDate = DATE_ADD(w2.RecordDate,INTERVAL 1 day)
    8. WHERE w1.Temperature > w2.Temperature

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

    子查询的表如下

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

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

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

    577. 员工奖金

    1. SELECT name,bonus
    2. FROM (
    3. SELECT name,bonus
    4. FROM Employee E
    5. LEFT JOIN Bonus B ON E.empId = B.empId
    6. ) t
    7. WHERE bonus < '1000' OR bonus IS NULL;

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

    1. SELECT student_id, subject_name, COUNT(*) AS attended_exams
    2. FROM Examinations
    3. GROUP BY student_id, subject_name

    直接统计Examinations表

    1. SELECT
    2. *
    3. FROM
    4. Students s
    5. CROSS JOIN
    6. Subjects sub

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

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

    1. SELECT stu.student_id,stu.student_name,s.subject_name,IFNULL(grouped.attended_exams,0) AS attended_exams
    2. FROM Students stu
    3. CROSS JOIN Subjects s
    4. LEFT JOIN(
    5. SELECT student_id, subject_name, COUNT(*) AS attended_exams
    6. FROM Examinations
    7. GROUP BY student_id, subject_name
    8. )grouped
    9. ON grouped.student_id = stu.student_id AND grouped.subject_name = s.subject_name
    10. ORDER BY stu.student_id,s.subject_name

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

    1. SELECT name
    2. FROM Employee
    3. WHERE id IN (
    4. SELECT managerId
    5. FROM Employee
    6. GROUP BY managerId
    7. HAVING COUNT(*) >= 5
    8. )

    1934. 确认率

    1. SELECT sign.user_id,IFNULL(ROUND(hit/total,2),0.00) confirmation_rate
    2. FROM Signups sign
    3. LEFT JOIN(
    4. SELECT user_id,time_stamp,COUNT(action) total
    5. FROM Confirmations
    6. GROUP BY user_id
    7. )grouped
    8. ON grouped.user_id = sign.user_id
    9. LEFT JOIN(
    10. SELECT user_id,COUNT(action) hit
    11. FROM Confirmations
    12. WHERE action = 'confirmed'
    13. GROUP BY user_id
    14. )hitcount
    15. ON hitcount.user_id = sign.user_id

  • 相关阅读:
    scrcpy-win64-v1.24使用
    OpenCV(二十五):边缘检测(一)
    ECharts多个数据视图进行自适应大小的解决方案
    5、JAVA入门——变量和数据类型1
    02 判断和循环
    [附源码]java毕业设计全国人口普查管理系统论文
    面试官:说说反射的底层实现原理?
    CentOS 7最小化安装没有ifconfig
    必背积分表
    【雷达通信】基于距离角度解耦法MIMO-OFDM雷达波束形成附matlab代码
  • 原文地址:https://blog.csdn.net/liangcha_xyy/article/details/133885377