在sqlite中查询关于第二行的信息
我有以下查询来获取studentsubject表中的第二行 很好用 但我需要另一种方法来提供比使用子查询更好的性能在sqlite中查询关于第二行的信息,sql,performance,sqlite,Sql,Performance,Sqlite,我有以下查询来获取studentsubject表中的第二行 很好用 但我需要另一种方法来提供比使用子查询更好的性能 select SbID , StID, max(mark) from studentsubject where mark <( select max(mark) from studentsubject group by SbID) group by SbID order by mark desc limit 5 您可以OFFSET第二行的请求,并将
select SbID , StID, max(mark)
from studentsubject
where mark <( select max(mark) from studentsubject group by SbID)
group by SbID
order by mark desc
limit 5
您可以
OFFSET
第二行的请求,并将请求限制在4
上,因此它将获取5行
select SbID , StID, max(mark)
from studentsubject
group by SbID
order by mark desc
limit 4 OFFSET 1
我有5门课,所以如果我这样做,第一个结果将消失是的。因为您将偏移量设置为1,所以结果将从第二行开始。结果将类似于SbID、StID、max(标记)4 6 96.3 1 5 95.1 3 6 92.2 5 5 89.5,因此cosure#2的标记将从您的第一行
编辑中消失,然后一直到第五行。但现在你更新了你的问题,你想让每一个科目都排在第二位。所以它不会产生这种输出。让我试试看。你能分享你的表格模式和虚拟数据以供参考吗?你能找到解决方案吗
INSERT INTO subject (
SubjectID,
SubjectName
)
VALUES (
1,
'C#'
);
INSERT INTO subject (
SubjectID,
SubjectName
)
VALUES (
2,
'C++'
);
INSERT INTO subject (
SubjectID,
SubjectName
)
VALUES (
3,
'JavaScript'
);
INSERT INTO subject (
SubjectID,
SubjectName
)
VALUES (
4,
'DataBase'
);
INSERT INTO subject (
SubjectID,
SubjectName
)
VALUES (
5,
'Asp.net'
);
-- Table: student
CREATE TABLE student (
StudentID [INT IDENTITY] (1, 1) PRIMARY KEY,
StudentName VARCHAR (50) NOT NULL
);
INSERT INTO student (
StudentID,
StudentName
)
VALUES (
1,
'Ahmad Ali'
);
INSERT INTO student (
StudentID,
StudentName
)
VALUES (
2,
'Khaled Ahmad'
);
INSERT INTO student (
StudentID,
StudentName
)
VALUES (
3,
'Mohammad Ahmad'
);
INSERT INTO student (
StudentID,
StudentName
)
VALUES (
4,
'Mohammad A.Sharif'
);
INSERT INTO student (
StudentID,
StudentName
)
VALUES (
5,
'Mahmoud Zakal'
);
INSERT INTO student (
StudentID,
StudentName
)
VALUES (
6,
'Morad Tamimi'
);
INSERT INTO student (
StudentID,
StudentName
)
VALUES (
7,
'Khalid Ahson'
);
INSERT INTO student (
StudentID,
StudentName
)
VALUES (
8,
'Eyad Buzzoum'
);
INSERT INTO student (
StudentID,
StudentName
)
VALUES (
9,
'Almeqdad a.ateeleh'
);
INSERT INTO student (
StudentID,
StudentName
)
VALUES (
10,
'Mohammad Abu Naser'
);
-- Table: studentsubject
CREATE TABLE studentsubject (
StID INT NOT NULL,
SbID INT NOT NULL,
mark DECIMAL (2, 2) NOT NULL,
FOREIGN KEY (
StID
)
REFERENCES student (StudentID),
FOREIGN KEY (
SbID
)
REFERENCES subject (SubjectID),
PRIMARY KEY (
StID,
SbID
)
);
INSERT INTO studentsubject (
StID,
SbID,
mark
)
VALUES (
1,
1,
90.5
);
INSERT INTO studentsubject (
StID,
SbID,
mark
)
VALUES (
1,
2,
97.5
);
INSERT INTO studentsubject (
StID,
SbID,
mark
)
VALUES (
1,
3,
87.5
);
INSERT INTO studentsubject (
StID,
SbID,
mark
)
VALUES (
1,
4,
87
);
INSERT INTO studentsubject (
StID,
SbID,
mark
)
VALUES (
1,
5,
83
);
INSERT INTO studentsubject (
StID,
SbID,
mark
)
VALUES (
2,
1,
88
);
INSERT INTO studentsubject (
StID,
SbID,
mark
)
VALUES (
2,
2,
80
);
INSERT INTO studentsubject (
StID,
SbID,
mark
)
VALUES (
2,
3,
83
);
INSERT INTO studentsubject (
StID,
SbID,
mark
)
VALUES (
2,
4,
81
);
INSERT INTO studentsubject (
StID,
SbID,
mark
)
VALUES (
2,
5,
79
);
INSERT INTO studentsubject (
StID,
SbID,
mark
)
VALUES (
3,
5,
79
);
INSERT INTO studentsubject (
StID,
SbID,
mark
)
VALUES (
3,
1,
82
);
INSERT INTO studentsubject (
StID,
SbID,
mark
)
VALUES (
3,
2,
72
);
INSERT INTO studentsubject (
StID,
SbID,
mark
)
VALUES (
3,
3,
84
);
INSERT INTO studentsubject (
StID,
SbID,
mark
)
VALUES (
3,
4,
87
);
INSERT INTO studentsubject (
StID,
SbID,
mark
)
VALUES (
4,
5,
85
);
INSERT INTO studentsubject (
StID,
SbID,
mark
)
VALUES (
4,
1,
83
);
INSERT INTO studentsubject (
StID,
SbID,
mark
)
VALUES (
4,
2,
84
);
INSERT INTO studentsubject (
StID,
SbID,
mark
)
VALUES (
4,
3,
88
);
INSERT INTO studentsubject (
StID,
SbID,
mark
)
VALUES (
4,
4,
87
);
INSERT INTO studentsubject (
StID,
SbID,
mark
)
VALUES (
5,
1,
95.1
);
INSERT INTO studentsubject (
StID,
SbID,
mark
)
VALUES (
5,
2,
92.6
);
INSERT INTO studentsubject (
StID,
SbID,
mark
)
VALUES (
5,
3,
90.2
);
INSERT INTO studentsubject (
StID,
SbID,
mark
)
VALUES (
5,
4,
82.3
);
INSERT INTO studentsubject (
StID,
SbID,
mark
)
VALUES (
5,
5,
89.5
);
INSERT INTO studentsubject (
StID,
SbID,
mark
)
VALUES (
6,
1,
85.1
);
INSERT INTO studentsubject (
StID,
SbID,
mark
)
VALUES (
6,
2,
82.6
);
INSERT INTO studentsubject (
StID,
SbID,
mark
)
VALUES (
6,
3,
92.2
);
INSERT INTO studentsubject (
StID,
SbID,
mark
)
VALUES (
6,
4,
96.3
);
INSERT INTO studentsubject (
StID,
SbID,
mark
)
VALUES (
6,
5,
85.5
);
INSERT INTO studentsubject (
StID,
SbID,
mark
)
VALUES (
7,
1,
85.1
);
INSERT INTO studentsubject (
StID,
SbID,
mark
)
VALUES (
7,
2,
87.6
);
INSERT INTO studentsubject (
StID,
SbID,
mark
)
VALUES (
7,
3,
75.2
);
INSERT INTO studentsubject (
StID,
SbID,
mark
)
VALUES (
7,
4,
92.3
);
INSERT INTO studentsubject (
StID,
SbID,
mark
)
VALUES (
7,
5,
84.5
);
INSERT INTO studentsubject (
StID,
SbID,
mark
)
VALUES (
8,
1,
79.1
);
INSERT INTO studentsubject (
StID,
SbID,
mark
)
VALUES (
8,
2,
77.6
);
INSERT INTO studentsubject (
StID,
SbID,
mark
)
VALUES (
8,
3,
75.2
);
INSERT INTO studentsubject (
StID,
SbID,
mark
)
VALUES (
8,
4,
72.3
);
INSERT INTO studentsubject (
StID,
SbID,
mark
)
VALUES (
8,
5,
84.5
);
INSERT INTO studentsubject (
StID,
SbID,
mark
)
VALUES (
9,
1,
88.1
);
INSERT INTO studentsubject (
StID,
SbID,
mark
)
VALUES (
9,
2,
86.6
);
INSERT INTO studentsubject (
StID,
SbID,
mark
)
VALUES (
9,
3,
84.2
);
INSERT INTO studentsubject (
StID,
SbID,
mark
)
VALUES (
9,
4,
92.3
);
INSERT INTO studentsubject (
StID,
SbID,
mark
)
VALUES (
9,
5,
83.5
);
INSERT INTO studentsubject (
StID,
SbID,
mark
)
VALUES (
10,
1,
83.6
);
INSERT INTO studentsubject (
StID,
SbID,
mark
)
VALUES (
10,
2,
82.7
);
INSERT INTO studentsubject (
StID,
SbID,
mark
)
VALUES (
10,
3,
85.2
);
INSERT INTO studentsubject (
StID,
SbID,
mark
)
VALUES (
10,
4,
88.7
);
INSERT INTO studentsubject (
StID,
SbID,
mark
)
VALUES (
10,
5,
80.2
);
COMMIT TRANSACTION;
select SbID , StID, max(mark)
from studentsubject
group by SbID
order by mark desc
limit 4 OFFSET 1