好的,另一个SQL问题。我想要实现的是通过公司展示他们的员工去过哪些课程,从那里开始,这是每家公司最受欢迎的课程。
目前,这就是我所拥有的:
SELECT a.corporatename,e.course_title,b.studentID FROM 公司a 加入学生b 开启 a.corporateID = b.corporateID
加入 studentcoursedetails c 开启 b.studentID = c.studentID
加入 classdetails d 开启 c.classdetailID = d.classdetailID
加入当然e 开启 d.courseID = e.courseID
WHERE b.corporateID!='0'
ORDER BY a.corporatename,e.course_title
这给了我一些基本的东西:
corporatename
{----------------------------- {1}} -------- ------------------------- course_title
studentID
- - - - Deutsche Lufthansa AG Berlin
{--------- {1}}
Airline Security Operations
- - - - 5
{--------- {1}}
Deutsche Lufthansa AG Berlin
- - - - Airline Security Operations
{--------- {1}}
6
- - - - Deutsche Lufthansa AG Berlin
------ Airline Security Operations
5
- - - - Deutsche Lufthansa AG Berlin
------ Workshop on Crisis Management
6
{---------- {1}} {--------- {1}}
从上面可以看出,到目前为止,汉莎航空公司已将其员工派往2门课程。即使Deutsche Lufthansa AG Berlin
5已经两次进入某一特定课程,因为他在第一次尝试时不及格,因此记录为2个条目。
我希望达到的目的是:
Workshop on Crisis Management
- - - - 7
{--------- {1}}
Korean Air Lines Co., Ltd
- - - - Airline Security Operations
------ 8
studentID
{---------- {1}} {--------- {1}}
我尝试使用此代码:
SELECT a.corporatename,e.course_title,count(DISTINCT b.studentID) AS 总计
FROM 公司a 加入学生b 开启 a.corporateID = b.corporateID
加入 studentcoursedetails c 开启 b.studentID = c.studentID
加入 classdetails d 开启 c.classdetailID = d.classdetailID
加入当然e 开启 d.courseID = e.courseID
WHERE b.corporateID!='0'
GROUP BY a.corporpname
ORDER BY a.corporatename,e.course_title
但我得到了什么:
Deutsche Lufthansa AG Berlin
{----------------------------- {1}} -------- ------------------------- Airline Security Operations
3
- - - - Deutsche Lufthansa AG Berlin
------ Workshop on Crisis Management
2
{---------- {1}} {--------- {1}}
它向我展示了最受欢迎的,是的,但我希望能够比较所有排名 我对此表示感谢。
感谢Korean Air Lines Co., Ltd
,这是一个简单的解决方案。
选择 a.corporatename,e.course_title,count(b.studentID) AS 总计
FROM 公司a 加入学生b 开启 a.corporateID = b.corporateID
加入 studentcoursedetails c 开启 b.studentID = c.studentID
加入 classdetails d 开启 c.classdetailID = d.classdetailID
加入当然e 开启 d.courseID = e.courseID
WHERE b.corporateID!='0'
GROUP BY a.corporatename,e.course_title
ORDER BY a.corporatename,e.course_title
我删除了Airline Security Operations
,因为我需要收集所有注册的数据,而不是每个唯一身份用户。感谢。
答案 0 :(得分:1)
尝试在GROUP BY中添加e.course_title
:
SELECT a.corporatename, e.course_title, count( DISTINCT b.studentID ) AS total
FROM corporate a
JOIN students b ON a.corporateID = b.corporateID
JOIN studentcoursedetails c ON b.studentID = c.studentID
JOIN classdetails d ON c.classdetailID = d.classdetailID
JOIN course e ON d.courseID = e.courseID
WHERE b.corporateID != '0'
GROUP BY a.corporatename, e.course_title
ORDER BY a.corporatename, e.course_title