[英]Ranking an SQL on 2 Levels
Okay, another SQL question. 好的,另一个SQL问题。 What I am trying to achieve is to show by company, which courses their employees have been to, and from there, which is the most popular for each company. 我要实现的目标是按公司展示员工参加过的课程,然后再从那里展示,这是每个公司最受欢迎的课程。
Currently, this is what I have: 目前,这是我所拥有的:
SELECT a.corporatename, e.course_title, b.studentID FROM corporate a 从公司a中选择 a.corporatename,e.course_title,b.studentID
JOIN students b ON a.corporateID = b.corporateID 加入学生b 在 a.corporateID = b.corporateID上
JOIN studentcoursedetails c ON b.studentID = c.studentID 加入学生课程详细信息c ON b.studentID = c.studentID
JOIN classdetails d ON c.classdetailID = d.classdetailID JOIN classdetails d ON c.classdetailID = d.classdetailID
JOIN course e ON d.courseID = e.courseID 加入课程e ON d.courseID = e.courseID
WHERE b.corporateID != '0' 在哪里 b.corporateID!='0'
ORDER BY a.corporatename, e.course_title 按公司名称或课程名称排序
This gives me something along these lines: 这给了我一些类似的东西:
corporatename
----------------------------- course_title
--------------------------------- studentID
corporatename
----------------------------- course_title
------------------- -------------- studentID
Deutsche Lufthansa AG Berlin
----- Airline Security Operations
--------- 5
Deutsche Lufthansa AG Berlin
Airline Security Operations
----- Airline Security Operations
--------- 5
Deutsche Lufthansa AG Berlin
----- Airline Security Operations
--------- 6
Deutsche Lufthansa AG Berlin
Airline Security Operations
----- Airline Security Operations
--------- 6
Deutsche Lufthansa AG Berlin
----- Airline Security Operations
--------- 5
Deutsche Lufthansa AG Berlin
Airline Security Operations
----- Airline Security Operations
--------- 5
Deutsche Lufthansa AG Berlin
----- Workshop on Crisis Management
------ 6
Deutsche Lufthansa AG Berlin
----- Workshop on Crisis Management
------ 6
Deutsche Lufthansa AG Berlin
----- Workshop on Crisis Management
------ 7
Deutsche Lufthansa AG Berlin
----- Workshop on Crisis Management
------ 7
Korean Air Lines Co., Ltd
---------- Airline Security Operations
--------- 8
Korean Air Lines Co., Ltd
---------- Airline Security Operations
--------- 8
From the above, we can see that Lufthansa has sent it's employees to 2 courses so far. 从以上内容可以看出,汉莎航空公司到目前为止已将其员工派往2门课程。 Even though studentID
5 has been to a particular course twice, because he flunked the first try, it is recorded as 2 entries. 即使studentID
5两次去过某门课程,但由于他没有完成第一次尝试, studentID
记录为2个条目。
What I hope to attain is this: 我希望达到的是:
Deutsche Lufthansa AG Berlin
----- Airline Security Operations
--------- 3
Deutsche Lufthansa AG Berlin
Airline Security Operations
----- Airline Security Operations
--------- 3
Deutsche Lufthansa AG Berlin
----- Workshop on Crisis Management
------ 2
Deutsche Lufthansa AG Berlin
----- Workshop on Crisis Management
------ 2
Korean Air Lines Co., Ltd
---------- Airline Security Operations
--------- 1
Korean Air Lines Co., Ltd
---------- Airline Security Operations
--------- 1
I tried to use this code: 我尝试使用此代码:
SELECT a.corporatename, e.course_title, count( DISTINCT b.studentID ) AS total SELECT a.corporatename,e.course_title,count(DISTINCT b.studentID) 作为总数
FROM corporate a 来自公司
JOIN students b ON a.corporateID = b.corporateID 加入学生b 在 a.corporateID = b.corporateID上
JOIN studentcoursedetails c ON b.studentID = c.studentID 加入学生课程详细信息c ON b.studentID = c.studentID
JOIN classdetails d ON c.classdetailID = d.classdetailID JOIN classdetails d ON c.classdetailID = d.classdetailID
JOIN course e ON d.courseID = e.courseID 加入课程e ON d.courseID = e.courseID
WHERE b.corporateID != '0' 在哪里 b.corporateID!='0'
GROUP BY a.corporatename GROUP BY a.corporatename
ORDER BY a.corporatename, e.course_title 按公司名称或课程名称排序
But what I got: 但是我得到了:
corporatename
----------------------------- course_title
--------------------------------- total
corporatename
----------------------------- course_title
------------------- -------------- total
Deutsche Lufthansa AG Berlin
----- Workshop on Crisis Management
------ 3
Deutsche Lufthansa AG Berlin
----- Workshop on Crisis Management
------ 3
Korean Air Lines Co., Ltd
---------- Airline Security Operations
--------- 1
Korean Air Lines Co., Ltd
---------- Airline Security Operations
--------- 1
it shows me the most popular, yes, but I'd like to be able to compare all ranks. 它向我展示了最受欢迎的游戏,是的,但是我希望能够比较所有排名。
I'd appreciate any help on this. 我对此表示感谢。
Thanks to bluish
, a simple solution. 感谢bluish
,这是一个简单的解决方案。
SELECT a.corporatename, e.course_title, count( b.studentID ) AS total 选择 a.corporatename,e.course_title,count(b.studentID) 作为总数
FROM corporate a 来自公司
JOIN students b ON a.corporateID = b.corporateID 加入学生b 在 a.corporateID = b.corporateID上
JOIN studentcoursedetails c ON b.studentID = c.studentID 加入学生课程详细信息c ON b.studentID = c.studentID
JOIN classdetails d ON c.classdetailID = d.classdetailID JOIN classdetails d ON c.classdetailID = d.classdetailID
JOIN course e ON d.courseID = e.courseID 加入课程e ON d.courseID = e.courseID
WHERE b.corporateID != '0' 在哪里 b.corporateID!='0'
GROUP BY a.corporatename , e.course_title GROUP BY a.corporatename,e.course_title
ORDER BY a.corporatename, e.course_title 按公司名称或课程名称排序
I removed the DISTINCT
because I need to collect data of all enrollments, not each unique user. 我删除了DISTINCT
因为我需要收集所有注册的数据,而不是每个唯一用户的数据。 Thanks. 谢谢。
Try to add also e.course_title
in the GROUP BY: 尝试在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
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.