吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 948|回复: 25
收起左侧

[已解决] 多表查询sql语句

[复制链接]
Zhou219 发表于 2022-9-22 15:22
本帖最后由 Zhou219 于 2022-9-22 19:33 编辑

——学生表
CREATE TABLE "STUDENT"(
"ID” NUMBER NOT NULL PRIMARY KEY COMMENT “主键"
"NAME" VARCHAR2(50 BYTE) COMMENT “名称'
“AGE" NUHBER COMMENT ‘年龄'
)
-—课程表
CREATE TABLE "COURSE""(
“ID" NUMBER NOT NULL PRIMARY KEY COMMENT '主键'
"NAME" VARCHAR2[50 BYTE) COMNENT '名称'
)
-—分数表
CREATE TABLE "RESULT”(
“ID” NUMBER NOT NULL PRIMARY KEY COMMENT '主键"
"SID" NUMBER COMMENT '学生ID',
“CID" NUMBER COMMENT ‘课程ID',
"SCORE" NUMBER COMMENT ‘分数'
)

从这三张表中查找出每个学生的最高分数的课程
这个sql语句应该怎么写啊,我只能查找出每个同学的最高成绩,就是查不出最高成就对应的学科,有没有大佬解一下,感谢

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

 楼主| Zhou219 发表于 2022-9-22 18:50
select s.name,
        (select max(score)
                from result r1
                right join student1 s1
                on r1.SID = s1.ID
                right join course c1
                on r1.CID = c1.ID
                where s1.name = s.name
                group by s1.id)maxscore
from student1 s

我可以通过这个sql查询出每个学生的三门课程的最高分,但是不知道怎么把他转成对应的课程显示
image.png
cshadow 发表于 2022-9-22 19:25
Zhou219 发表于 2022-9-22 19:20
这个结果也是三门课的最高分,我想查每个同学各自的三门课的最高分
比如:李四 数学   张三 语文

[SQL] 纯文本查看 复制代码
SELECT S.NAME, C.NAME, TTT.SCORE FROM (
SELECT R.* FROM(
SELECT SID, MAX(SCORE) AS MAX_SCORE
from dbo.RESULT
GROUP BY SID) AS T JOIN dbo.RESULT R on T.SID = R.SID AND T.MAX_SCORE = R.SCORE) AS TTT JOIN dbo.COURSE C on TTT.CID = C.ID JOIN dbo.STUDENT S ON TTT.SID = S.ID 

  这样呢,符合需求不
luxingyu329 发表于 2022-9-22 17:16
yejinnan 发表于 2022-9-22 17:31
本帖最后由 yejinnan 于 2022-9-22 17:32 编辑

[SQL] 纯文本查看 复制代码
SELECT c.NAME,
       ab.*
FROM
(
    SELECT CID,
           b.NAME,
           MAX(SCORE) SCORE
    FROM RESULT a
        LEFT JOIN COURSE b
            ON a.CID = b.ID
    GROUP BY CID,b.NAME
) ab
    LEFT JOIN RESULT c
        ON ab.CID = c.CID
           AND ab.SCORE = c.SCORE
    LEFT JOIN STUDENT d
        ON c.SID = d.ID;

额 这是按我理解写的 抛砖引玉下吧

免费评分

参与人数 2吾爱币 +2 热心值 +2 收起 理由
Zhou219 + 1 + 1 热心回复!
luxingyu329 + 1 + 1 给你个赞

查看全部评分

lishiheng1999 发表于 2022-9-22 17:48
yejinnan 发表于 2022-9-22 17:31
[mw_shl_code=sql,true]SELECT c.NAME,
       ab.*
FROM

没得c.NAME, 可以成功

1        语文        40
2        英语        50
 楼主| Zhou219 发表于 2022-9-22 18:13
luxingyu329 发表于 2022-9-22 17:16
没有看出你这三张表之间的关联呀

分数表的sid和cid分别是学生id和课程id
 楼主| Zhou219 发表于 2022-9-22 18:21
yejinnan 发表于 2022-9-22 17:31
[mw_shl_code=sql,true]SELECT c.NAME,
       ab.*
FROM

抱歉,水平有限,没太看懂这个ab.*和ab是啥,还有这个好像结果是各科成绩的最高分吧,我想查每个学生的最高分对应的课程,比如张三的最高分是90,这门课是数学,然后查出来 张三 数学
 楼主| Zhou219 发表于 2022-9-22 18:23
lishiheng1999 发表于 2022-9-22 17:48
没得c.NAME, 可以成功

1        语文        40

但是我想查出每个学生的最高成绩对应的学科
Abin011101 发表于 2022-9-22 18:23
select SID,st.NAME,CID,co.Name,maxSCORE from
        (
                select SID,CID,max(SCORE) as 'maxSCORE' from RESULT
                group by SID,CID
        ) sc
inner join STUDENT st on sc.SID=st.ID
inner join COURSE co on sc.CID=co.Id
where 1=1
 楼主| Zhou219 发表于 2022-9-22 18:28
Abin011101 发表于 2022-9-22 18:23
select SID,st.NAME,CID,co.Name,maxSCORE from
        (
                select SID,CID,max(SCORE) as 'maxSCORE' from RES ...

感谢,不过这个好像查出所有学生所有课程的分数来了
image.png
qqrate 发表于 2022-9-22 18:40
本帖最后由 qqrate 于 2022-9-22 19:00 编辑

[SQL] 纯文本查看 复制代码
select a.id ID ,a.name 姓名, b.name 课程,d.score 成绩
from
student a,course b,
(select c.sid sid,c.cid cid,max(c.score) score
from result c group by sid) as d
where  a.id=d.sid and b.id=d.cid
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-25 07:36

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表