gpt4 book ai didi

mysql - 如何在连接在一起的 3 个表上正确使用 COUNT?

转载 作者:行者123 更新时间:2023-11-29 20:00:20 25 4
gpt4 key购买 nike

我有 3 张 table 想要加入。学生迟到缺勤

学生包含每个学生所需的信息。

迟到缺勤。它们的结构几乎相同。两者都包含相同的列,例如 Student_id、日期等...

我的目标是统计缺勤和迟到的次数,并将其与具有相同student_id的学生放在同一行。

例如。学生表:

student_id  name
a1 Josh
a2 Pete
a3 Gabe
a4 Howard

迟到表:

student_id  date
a2 January 1,2016
a4 January 23,2016

缺勤表:

student_id  date
a1 Feb. 2,2009
a2 August 3,2011
a2 August 4,2011
a4 March 18,2016
a4 June 28,2016
a4 June 29,2016
a4 July 15,2016
a4 July 16,2016
a4 July 29,2016

我已经尝试过一些。但这是迄今为止我遇到的最接近的一个。

SELECT students.student_id,
COUNT(absenteeism.student_id) AS absents,
COUNT(tardiness.student_id) AS tardi
FROM students
LEFT JOIN absenteeism ON students.student_id = absenteeism.student_id
LEFT JOIN tardiness ON students.student_id = tardiness.student_id
GROUP BY students.student_id

结果是

student_id  absents  tardi
a1 1 0
a2 2 2
a3 0 0
a4 6 6

我只知道缺席人数。问题是 a2 和 a4 的缺勤和迟到次数总是相同。

正确的结果应该是这样的...

student_id  absents  tardi
a1 1 0
a2 2 1
a3 0 0
a4 6 1

最佳答案

在这个主题的帮助下我终于弄清楚了MYSQL Left Join COUNTS from multiple tables

我添加了不同的计数并使用每个表的主键而不是student_id。

SELECT students.student_id,
COUNT(distinct absenteeism.absent_id) AS absents,
COUNT(distinct tardiness.tardi_id) AS tardi
FROM students
LEFT JOIN absenteeism ON absenteeism.student_id = students.student_id
LEFT JOIN tardiness ON tardiness.student_id = students.student_id
GROUP BY students.student_id

我的错误是在缺勤和迟到中使用了同一列student_id。这就是为什么使用

COUNT(distinct absenteeism.student_id)
COUNT(distinct tardiness.student_id)

只会导致

student_id  absents  tardi
a1 1 0
a2 1 1
a3 0 0
a4 1 1

关于mysql - 如何在连接在一起的 3 个表上正确使用 COUNT?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40558281/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com