2012-04-27 4 views
4

Person 테이블과 Courses 테이블이 있습니다. Person 테이블에 나는 PersonName 란을 가지고 있습니다. Courses 표에서 CourseTitle, PersonNameCourseDifficulty이 있다고 가정 해 봅니다. CourseDifficulty은 1-4입니다 (4가 가장 힘듭니다). Person에서 사람들의 목록을 반환하려면 어떻게해야하며 각 사람마다 가장 어려운 수업을 보여주는 열이 CourseTitle에 있습니다.SQL 중첩 선택의 별칭 열 만들기?

는 지금까지 내가 아는 한, 나는 브렛을 수행하여 복용하는 가장 어려운 클래스의 CourseTitle를 얻을 것 다음

SELECT CourseTitle 
FROM Courses 
WHERE PersonName = 'Brett' 
    AND CourseDifficulty = (SELECT MAX(CourseDifficulty) 
          FROM Courses 
          WHERE PersonName='Brett') 

하지만 Person 테이블에있는 각 사람에 대한 것을 실행 어떻게? 결과가 다음과 같이 되길 원합니다.

Brett-SQL For Dummies 4 
Tim-Quantum Mechanics 
Jane-Thermodynamics 2 

죄송합니다. 도움에 미리 감사드립니다!

+0

학생이 "가장 어려운 과목"을 2 개 이상 갖고 있다면 어떻게되고 싶습니까? (아, 그리고이 숙제입니까?) –

+0

아니, 일을 위해서. 나는 훨씬 더 복잡한 시나리오를 가지고 있지만 이것은 내가 가장 기본적인 수준에서해야 할 일이다. 이 시나리오에서는 아무도 같은 어려움을 겪고있는 두 코스가 없습니다. – DontFretBrett

답변

5

당신이 PERSONNAME을 가정하고하는 것은 고유 여기

SELECT p.name ,p.address, c.courseTitle ,c.courseDifficulty FROM (
     SELECT personName, courseTitle, MAX(courseDifficulty) AS courseDifficulty 
     FROM course 
     GROUP BY personName 
) AS c RIGHT JOIN person AS p ON p.name = c.personName 

를 사용할 수 있습니다. 그렇지 않으면 사람 이름 대신 여기에서 고유 ID를 사용하고 select 문에이 필드를 추가 할 수 있습니다.

+0

아, 선택 AS X를 사용하고 X를 다른 테이블에 조인 할 수 있습니다. 나는 이것이 나를 위해 그것을 할 것 같아요. 나는 그것을 시도하고 다시 당신에게 돌아갈거야. – DontFretBrett

1

이 시도 :

SELECT c.CourseTitle, c.PersonName, c.CourseDifficulty 
    FROM Courses c 
WHERE c.CourseDifficulty=(SELECT MAX(c2.CourseDifficulty) FROM Courses c2 WHERE c2.PersonName=c.PersonName) 
+0

Brett의 가장 어려운 수업이 3이고 Bob의 가장 어려운 수업이 4 인 경우 어떨까요? 4의 수업 만 반환하면 Brett는 제외됩니다. 나는 그것을 잘못 읽고있을 수도있다. – DontFretBrett

+0

나는 앞을 내다 보았다. 코스 테이블에있는 1186 개의 레코드 중 964 개가 돌아 왔고 모든 CourseDifficulty의 1에서 4까지 반환되었으며 PersonName 열은 각 Person마다 다릅니다. – DontFretBrett

+0

이 SQL은 레코드에있는 사람에게 가장 어려운 코스에 대해서만 레코드를 반환해야합니다. 그러나 한 사람이 같은 최대 난이도의 코스를 여러 개 가지고있는 경우 모든 코스를 반환합니다. 나는 이것이 같은 사람을 위해 배수가 돌아 오는 이유라고 생각합니다.이 시나리오에서 반환되어야 할 것은 무엇입니까? – JoshL