1

STUDENT学部の学生に関するデータを含むテーブルがあります。

STUDENT(ID, Name, Grade, ID_Tutor)

構造データ

CREATE TABLE STUDENT
    (`ID` int, `Name` varchar(5), `Grade` int, `ID_Tutor` int);

INSERT INTO STUDENT
    (`ID`, `Name`, `Grade`, `ID_Tutor`)
VALUES
    (1,    'A',     10,       NULL),
    (2,    'B',     9.5,      1),
    (3,    'C',     9,        1),
    (4,    'D',     8,        1),
    (5,    'E',     7,        4),
    (6,    'F',     8,        1),
    (7,    'G',     5,        7),
    (10,   'H',     6,        5)
    (11,   'I',     7,        3),
    (12,   'J',     9,        10),
    (13,   'K',     9.6,      11),
    (14,   'L',     8.9,      5),
    (15,   'M',     9.9,      13),
    (16,   'N',     7,        2),
    (17,   'O',     7.9,      2),
    (18,   'P',     2,        15);

トップ5の教員の成績:

    `ID`, `Name`, `Grade`, `ID_Tutor`
    (1,    'A',     10,       NULL),
    (15,   'M',     9.9,      13),
    (13,   'K',     9.6,      11),
    (2,    'B',     9.5,      1),
    (3,    'C',     9,        1),
    (12,   'J',     9,        10),

結果として、上記の表からこれらのチューターを持つ学生が表示されます。

SQLクエリ(MYSQL)を作成して検索したい

  • 学生名
  • 家庭教師の名前
  • 家庭教師グレード

チューターがトップ5の教員の学生の成績を持っている学生の場合(およびOracleソリューションの場合は使用せずに)。LIMITROWNUM

結果は次のようになります。

| student name | tutor name | tutor grade |
       'B'           'A'          10           
       'C'           'A'          10           
       'D'           'A'          10           
       'F'           'A'          10           
       'P'           'M'           9.9           
       'M'           'K'           9.6              
       'N'           'B'           9.5            
       'O'           'B'           9.5            
       'I'           'C'           9            

私はこのようなことを試しましたが(動作しませんでした)、私は多くのことを複雑にしていると思います...(そして私は使用すべきではありませんROWNUM

SELECT 
    s.ID, 
    s.Name Student, 
    s.Grade, 
    p.ID_Tutor, 
    p.Grade
FROM 
    STUDENT s,
    (SELECT * FROM 
        (SELECT * FROM 
            (SELECT 
                t.Name Tutor , 
                t.ID , 
                Grade Grade_Tutor 
            FROM STUDENT s
                JOIN STUDENT t 
                    on s.ID_Tutor = t.ID
            GROUP BY t.Name, t.ID)
        ORDER BY 3 desc ) 
    WHERE ROWNUM < 6) p
WHERE s.ID_Tutor = p.ID

このエラーをください:

    #1248 - Every derived table must have its own alias

前もって感謝します!

4

2 に答える 2

1

コードにいくつかのテーブルエイリアスがありません。この動作するSQLFiddleコードを確認してください。しかし、いくつかのダム値を追加しただけなので、値は返されません。自由に使用して、結果をテストしてください。

SELECT s.ID, s.Name Student, s.Grade, p.ID_Tutor, p.Grade_tutor
FROM STUDENT s,
    (SELECT * FROM 
        (SELECT * FROM 
            (SELECT t.Name Tutor, t.ID , s.Grade Grade_Tutor, s.ID_Tutor
               FROM STUDENT s
               JOIN STUDENT t
                    on s.ID_Tutor = t.ID
            GROUP BY t.Name, t.ID) innerTable
         ORDER BY 3 desc ) secondInnerTable
     WHERE @ROWNUM < 6) p
WHERE s.ID_Tutor = p.ID
于 2012-09-10T08:48:51.597 に答える
1

@TehShrikeに感謝します、彼の答えです!!!

唯一の「欠点」は、LIMITを使用していることですが、誰かがLIMITのないバージョンを持っている場合は、それを投稿してください。それまでは、@ TehShrikeに感謝します!

SELECT 
        student.NAME AS student_name, 
        top_five_tutors.NAME AS tutor_name, 
        top_five_tutors.grade AS tutor_grade
FROM (
        SELECT 
                tutor.id, 
                tutor.NAME, 
                tutor.Grade
        FROM (
                SELECT DISTINCT 
                                id_tutor AS id
                FROM student
             ) AS tutor_ids

        JOIN student AS tutor 
            ON tutor.id = tutor_ids.id

        ORDER BY tutor.grade DESC
            LIMIT 5
     ) AS top_five_tutors

JOIN student 
    ON student.id_tutor = top_five_tutors.id
于 2012-09-11T20:19:06.140 に答える