2012-04-27 8 views
4

PersonテーブルとCoursesテーブルがあります。 Personテーブルでは、私はカラムPersonNameを持っています。 Coursesテーブルでは、CourseTitlePersonNameCourseDifficultyがあるとします。 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

生徒が1つ以上の「難しいコース」を持っている場合はどうしますか? (ああ、この宿題は?) –

+0

それは仕事のためではありません。私ははるかに複雑なシナリオを持っていますが、これは私が最も基本的なレベルで行う必要があるものです。このシナリオでは、誰も同じ難易度の2つのコースを持つことはありません – DontFretBrett

答えて

5

あなたはここに以下の

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 

を使用することができますが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

関連する問題