2 桌参赛申请,3 场比赛中最佳
Entry request of 2 tables with best of 3
我如何提出一个请求,列出表格中前 3 名的姓名和评分
在SQL服务器中:
SELECT TOP 3 G.student_id, S.name, S.sex, G.grade
FROM Grades G
INNER JOIN Student S
ON G.student_id = S.student_id
WHERE S.sex = 'm'
ORDER BY grade DESC
如果您的数据库是 Oracle ,则使用:
select name, grade
from
(
select s.name, g.grade, dense_rank() over (order by grade desc) dr
from students s join grades g on ( s.student_id = g.student_id )
where s.sex = 'm'
)
where dr <= 3;
如果数据库是 Mysql 或 PostgreSQL,则使用:
select s.name, g.grade
from students s join grades g on ( s.student_id = g.student_id )
where s.sex = 'm'
order by g.grade desc
limit 3;
您可以使用 rownum 来获取此结果。
您可以尝试下面的一项并根据需要进行调整。
Select * 来自 (SELECT st.name,gr.grade FROM students st , grades gr
其中 st.student_id = gr.student_id 和 st.sex = 'm' 排序依据
等级 DESC) 其中
rownum <= 3 ;
PostgreSQL:
SELECT name, grade
FROM students
JOIN grades USING(student_id)
WHERE sex = 'm'
ORDER BY grade desc
LIMIT 3
JOIN
表格
- 使用
WHERE
按性别过滤
- 使用
ORDER BY..desc
按降序(按等级)排序,因此较大的数字在顶部
- trim结果数改为3,使用
LIMIT
SQL Server:
SELECT TOP 3 s.name, g.grade
FROM students s
JOIN grades g ON ( s.student_id = g.student_id )
WHERE sex = 'm'
ORDER BY grade desc
JOIN
表格
- 使用
WHERE
按性别过滤
- 使用
ORDER BY..desc
按降序(按等级)排序,因此较大的数字在顶部
- trim结果数为3,在查询的开头使用
TOP
注意:您可能希望在结果中包含一个唯一 ID,因为您可能有很多同名的学生,从而导致结果不明确
这个问题听起来像是来自做作业的学生!不管怎样,下面的一些 Oracle SQL 可能会有帮助。
SELECT STUDENT_NAME, STUDENT_GRADE
FROM (
SELECT S.NAME AS "STUDENT_NAME", G.GRADE AS "STUDENT_GRADE"
FROM STUDENTS S JOIN GRADES G USING (STUDENT_ID)
WHERE S.SEX='m'
ORDER BY 2
)
WHERE ROWNUM < 4;
Oracle 以后的版本:
SELECT S.NAME AS "STUDENT_NAME", G.GRADE AS "STUDENT_GRADE"
FROM STUDENTS S JOIN GRADES G USING (STUDENT_ID)
WHERE S.SEX='m'
ORDER BY 2
FETCH FIRST 3 ROWS ONLY;
我如何提出一个请求,列出表格中前 3 名的姓名和评分
在SQL服务器中:
SELECT TOP 3 G.student_id, S.name, S.sex, G.grade
FROM Grades G
INNER JOIN Student S
ON G.student_id = S.student_id
WHERE S.sex = 'm'
ORDER BY grade DESC
如果您的数据库是 Oracle ,则使用:
select name, grade
from
(
select s.name, g.grade, dense_rank() over (order by grade desc) dr
from students s join grades g on ( s.student_id = g.student_id )
where s.sex = 'm'
)
where dr <= 3;
如果数据库是 Mysql 或 PostgreSQL,则使用:
select s.name, g.grade
from students s join grades g on ( s.student_id = g.student_id )
where s.sex = 'm'
order by g.grade desc
limit 3;
您可以使用 rownum 来获取此结果。
您可以尝试下面的一项并根据需要进行调整。
Select * 来自 (SELECT st.name,gr.grade FROM students st , grades gr 其中 st.student_id = gr.student_id 和 st.sex = 'm' 排序依据 等级 DESC) 其中 rownum <= 3 ;
PostgreSQL:
SELECT name, grade
FROM students
JOIN grades USING(student_id)
WHERE sex = 'm'
ORDER BY grade desc
LIMIT 3
JOIN
表格- 使用
WHERE
按性别过滤
- 使用
ORDER BY..desc
按降序(按等级)排序,因此较大的数字在顶部 - trim结果数改为3,使用
LIMIT
SQL Server:
SELECT TOP 3 s.name, g.grade
FROM students s
JOIN grades g ON ( s.student_id = g.student_id )
WHERE sex = 'm'
ORDER BY grade desc
JOIN
表格- 使用
WHERE
按性别过滤
- 使用
ORDER BY..desc
按降序(按等级)排序,因此较大的数字在顶部 - trim结果数为3,在查询的开头使用
TOP
注意:您可能希望在结果中包含一个唯一 ID,因为您可能有很多同名的学生,从而导致结果不明确
这个问题听起来像是来自做作业的学生!不管怎样,下面的一些 Oracle SQL 可能会有帮助。
SELECT STUDENT_NAME, STUDENT_GRADE
FROM (
SELECT S.NAME AS "STUDENT_NAME", G.GRADE AS "STUDENT_GRADE"
FROM STUDENTS S JOIN GRADES G USING (STUDENT_ID)
WHERE S.SEX='m'
ORDER BY 2
)
WHERE ROWNUM < 4;
Oracle 以后的版本:
SELECT S.NAME AS "STUDENT_NAME", G.GRADE AS "STUDENT_GRADE"
FROM STUDENTS S JOIN GRADES G USING (STUDENT_ID)
WHERE S.SEX='m'
ORDER BY 2
FETCH FIRST 3 ROWS ONLY;