我有2个表,一个用于课程名称(名为Courses
),另一个用于教授该课程的大学(名为Unicourses
)。
我想从UniCourses
表中选择coursename
和Courses
列中的所有列。
一切顺利,但我在查询结果中重复了一些值,并希望所有coursename
列都是唯一的。
我尝试使用DISTINCT,但我无法让它发挥作用。
这是我正在使用的查询:
SELECT
UniCourses.courseid, UniCourses.uniname,
UniCourses.rating, UniCourses.ratingppl,
UniCourses.approved,
Courses.courseid, Courses.coursename
FROM
UniCourses
INNER JOIN
Courses ON UniCourses.courseid = Courses.courseid
WHERE
UniCourses.approved = 1
ORDER BY
UniCourses.rating / CASE UniCourses.ratingppl WHEN 0 THEN 1 ELSE UniCourses.ratingppl END DESC;
这就是我得到的
|courseid|uniname|rating|ratingppl|approved|coursename|
_______________________________________________________
| 4 |howard | 20 | 5 | 1 | algebra |
| 4 |hampton| 10 | 2 | 1 | algebra |
这就是我想要的
|courseid|uniname|rating|ratingppl|approved|coursename|
_______________________________________________________
| 4 |hampton| 10 | 2 | 1 | algebra |
正如您所看到的,这些课程与2所大学教授的课程相同, 我希望只出现1,具有最高等级,由...计算 (评级/ ratingppl);
Courses
表格列:
courseid, coursename
Unicourses
表格列:
courseid, uniname, rating, ratingppl, approved
答案 0 :(得分:2)
WITH X AS
(
SELECT UniCourses.courseid,UniCourses.uniname,UniCourses.rating
,UniCourses.ratingppl,UniCourses.approved,Courses.courseid
,Courses.coursename
,ROW_NUMBER() OVER (PARTITION BY Courses.coursename
ORDER BY ISNULL((rating / NULLIF(ratingppl, 0)),0)
DESC) rnRating
FROM UniCourses
INNER JOIN Courses
ON UniCourses.courseid = Courses.courseid
WHERE UniCourses.approved=1
)
SELECT courseid,uniname,rating ,ratingppl
,approved,courseid ,coursename
FROM x
WHERE rnRating = 1
答案 1 :(得分:0)
当你在霍华德和汉普顿都有相同的路线时,你正试图加入the course。
将霍华德路线更改为不同的值,它将返回您的唯一记录。
答案 2 :(得分:0)
如果没有Id coulmns
SELECT
UniCourses.courseid,
UniCourses.uniname,
UniCourses.rating,
UniCourses.ratingppl,
UniCourses.approved,
Courses.courseid,
Courses.coursename
FROM UniCourses
INNER JOIN Courses ON
Courses.courseid = UniCourses.courseid
INNER JOIN (
SELECT
UniCourses.courseid,
MAX(UniCourses.rating / CASE UniCourses.ratingppl WHEN 0 THEN 1 ELSE UniCourses.ratingppl END) as MaxValue
FROM UniCourses
GROUP BY UniCourses.courseid
) AS CoursesMax ON
CoursesMax.courseid = UniCourses.courseid
AND (UniCourses.rating / CASE UniCourses.ratingppl WHEN 0 THEN 1 ELSE UniCourses.ratingppl END)= MaxValue