0

私はstudent_id、score、subjectを持つ学生テーブルを持っています

CREATE TABLE IF NOT EXISTS students 
(student_id INT(3),   subject ,VARCHAR(45),   score INT(3) );

挿入したデータは

insert into students values(1,'math',70);
insert into students values(1,'science',71);
insert into students values(1,'history',72);
insert into students values(1,'english',73);
insert into students values(1,'kannada',74);
insert into students values(3,'math',50);
insert into students values(3,'science',51);
insert into students values(3,'history',52);
insert into students values(3,'english',53);
insert into students values(3,'kannada',54);
insert into students values(2,'math',60);
insert into students values(2,'science',61);
insert into students values(2,'history',62);
insert into students values(2,'english',63);
insert into students values(2,'kannada',64);

クエリを使用した後、必要な出力を取得しています。

select student_id,score,subject
    from
        (select @prev := '', @n:=0) init
    join
        (select @n := if(subject != @prev , 1, @n+1) as n,
                 @prev := subject,
                 student_id,score,subject from students
                 order by
                 subject asc, 
                 score desc
        ) x
        where n<=2
        order by subject, score desc;

これがどのように機能するのか理解できません。なぜ参加する必要があるのですか? これはサブクエリですか?from 句のステートメントは、データのすべての行で実行されますか? 誰か私に説明してください。SQLを学んでいます。

注:このクエリはオンラインでこれに似ていることがわかりましたが、要件に合わせて調整しただけで、これは私の仕事ではありません。

4

1 に答える 1