Leetcode : 1280(统计学生考试出席次数)

Leetcode : 1280(统计学生考试出席次数)

💡 原文英文,约500词,阅读约需2分钟。
📝

内容提要

通过学生表和科目表的CROSS JOIN生成所有组合,再用LEFT JOIN与考试表连接,统计每位学生参加每门考试的次数,确保未参加考试的学生也能显示,最终结果按学生和科目分组。

🎯

关键要点

  • 问题陈述:需要统计每位学生参加每门考试的次数,结果应包括所有学生和科目,即使学生未参加某科目的考试。
  • 解决方案的关键步骤:
  • 1. 组合所有学生和科目:使用CROSS JOIN生成所有学生和科目的组合,确保每位学生与每个科目配对。
  • 2. 统计考试参加次数:使用LEFT JOIN与考试表连接,统计每位学生参加每门考试的次数,未参加的考试计数为0。
  • 3. 分组和排序结果:按学生ID、学生姓名和科目名称分组,计算参加考试的次数,并按学生ID和科目名称排序。
  • SQL查询示例:使用SELECT语句结合CROSS JOIN和LEFT JOIN实现统计。
  • 示例输入表:包括学生表、科目表和考试表的结构。
  • 示例输出:展示每位学生在每门科目的考试参加次数。
  • 输出解释:详细说明每位学生在各科目考试中的参加情况。
  • 查询有效性:CROSS JOIN确保所有学生-科目组合被包含,LEFT JOIN确保未参加考试的学生也能显示,COUNT函数计算参加次数,GROUP BY和ORDER BY用于结果的清晰组织。

延伸问答

如何统计每位学生参加每门考试的次数?

通过CROSS JOIN生成所有学生和科目的组合,再用LEFT JOIN与考试表连接,统计每位学生参加每门考试的次数。

CROSS JOIN和LEFT JOIN在查询中有什么作用?

CROSS JOIN用于生成所有学生和科目的组合,确保每位学生与每个科目配对;LEFT JOIN用于统计考试参加次数,确保未参加考试的学生也能显示。

如何处理未参加考试的学生?

使用LEFT JOIN可以确保未参加考试的学生在结果中显示,参加次数计为0。

示例输出中,Alice参加了多少次Math考试?

Alice参加了Math考试3次。

如何对查询结果进行分组和排序?

通过GROUP BY按学生ID、学生姓名和科目名称分组,使用ORDER BY按学生ID和科目名称排序。

SQL查询的主要结构是什么?

主要结构包括SELECT语句,结合CROSS JOIN和LEFT JOIN,最后使用GROUP BY和ORDER BY。

➡️

继续阅读