联结的基础知识SQL必知必会 12课 联结将数据分解为多个表可以更有效地存储更方便地处理并且可伸缩性待补充题目197 上升的温度LAG函数详解LAG()是一个窗口函数用于访问结果集中前一行的数据。LAG(column, offset, default) OVER (ORDER BY column)column: 要获取的列offset: 可选向前偏移几行默认1default: 可选当没有前一行的默认值默认NULLSELECT id FROM ( SELECT id, temperature, LAG(temperature) OVER (ORDER BY recordDate) AS prev_temperature FROM Weather ) t WHERE temperature prev_temperature;啊 但这也是错的此处对日期的处理是行偏差没有考虑非连续日期的情况SELECT w1.id FROM Weather w1 LEFT JOIN Weather w2 ON DATEDIFF(w1.recordDate, w2.recordDate) 1 WHERE w1.temperature w2.temperature;DATEDIFF 函数详解基本语法DATEDIFF(date1, date2) n返回date1 - date2的天数差w1的日期 比 w2的日期正好大1天即w1是w2的明天w2是w1的昨天1661 每台机器的进程平均运行时间# Write your MySQL query statement below SELECT s.machine_id, ROUND(AVG(e.timestamp - s.timestamp), 3) AS processing_time FROM Activity s JOIN Activity e ON s.machine_id e.machine_id AND s.process_id e.process_id AND s.activity_type start AND e.activity_type end GROUP BY s.machine_id ORDER BY s.machine_id;自联结1280 学生们参加各科考试的次数核心难点确实是如何处理学生没有参加某门考试的情况。题目需求分析需要返回每个学生Students表每门科目Subjects表以及该学生参加该科目考试的次数Examinations表如果没参加显示0关键思路构建完整的数据框架核心思想先构建所有可能的组合再左连接实际数据步骤1生成所有学生 × 科目的组合-- 所有学生和所有科目的笛卡尔积 SELECT * FROM Students CROSS JOIN Subjects;步骤2左连接实际考试数据LEFT JOIN 的语义是保留左表所有行右表匹配到的就加上匹配不到就补 NULL而不是合并相同列。-- 左连接保证所有组合都保留 SELECT s.student_id, s.student_name, sub.subject_name, COUNT(e.student_id) as attended_exams -- 注意COUNT(e.student_id) 而不是 COUNT(*) FROM Students s CROSS JOIN Subjects sub LEFT JOIN Examinations e ON s.student_id e.student_id AND sub.subject_name e.subject_name GROUP BY s.student_id, s.student_name, sub.subject_name ORDER BY s.student_id, sub.subject_name;