在2个级别上排名SQL

时间:2011-01-20 08:43:09

标签: sql join ranking

好的,另一个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,因为我需要收集所有注册的数据,而不是每个唯一身份用户。感谢。

1 个答案:

答案 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