简体   繁体   English

在2个级别上对SQL排名

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM