2张桌子的入场请求,最好是3张

  • 本文关键字:3张 请求 2张 iptables
  • 更新时间 :
  • 英文 :


如何发出请求,列出表中前 3 名的名称和评级

在 SQL Server 中:

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

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按降序(按等级(对其进行排序,因此较大的数字位于顶部
  • 使用LIMIT将结果数修剪为 3

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按降序(按等级(对其进行排序,因此较大的数字位于顶部
  • 使用查询开头的TOP将结果数修剪为 3 个

注意:您可能希望在结果中包含唯一的 ID,因为您可能有许多同名的学生,使结果不明确

您可以使用 rownum 来获取此结果。

如有必要,您可以尝试在下面并调整它。

选择* 从 (选择 st.name,gr.grade FROM 学生 st , grade gr 其中 st.student_id = gr.student_id 和 st.= 'm' 顺序 等级 DESC( 其中 罗努姆 <= 3 ;

如果您的数据库是 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;

SQL Fiddle Demo(for Oracle(

如果DB是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;

SQL Fiddle Demo(for MySQL(

SQL Fiddle Demo(for PostgreSQL(

这个问题听起来像来自一个做作业的学生!无论如何,一些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;

甲骨文在更高版本中:

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;

相关内容

最新更新