当前位置: 首页 > 知识库问答 >
问题:

Oracle上的SQL:已经连接了两个表,现在我需要另一个表中的另一列(另一个连接)

戚繁
2023-03-14

我有三张桌子;1.学生-id,name 2.主题-sid,sname 3.结果-id,sid,marks(id和sid是上面两个表引用的外键)

现在,我执行

SELECT s.sname AS SubjectName, MAX(r.marks) AS MaxMarks
FROM subjects s, results r
WHERE s.sid=r.sid
GROUP BY r.sid, s.sname
ORDER BY r.sid

我得到了最高分的科目名称。现在,我还想要获得这些最高分的学生姓名。

所以我尝试添加列 r.id,不起作用。我尝试在此查询中添加表学生。我可能会在添加表格或其他东西后对分组进行恶作剧?

这是我干的

SELECT r.id AS StudentID, s.sname AS SubjectName, MAX(r.marks) AS MaxMarks
FROM subjects s, results r
WHERE s.sid=r.sid
GROUP BY r.sid, s.sname, r.id
ORDER BY r.sid

我得到了每个学生的ID,有重复的科目和分数。而我最想要的是每门课都得最高分的学生。

共有2个答案

朱炳
2023-03-14

你可以简单地添加新的联接,我建议你使用显式联接辛塔克斯

SELECT t.name, s.sname AS SubjectName, MAX(r.marks) AS MaxMarks
FROM subjects s
INNER JOIN  results r ON  s.sid=r.sid
INNER JOIN  Students t ON t.id = r.id
GROUP BY r.sid, s.sname, t.name
ORDER BY r.sid

在隐式连接sintax中应该是

  SELECT s.sname AS SubjectName, MAX(r.marks) AS MaxMarks
  FROM subjects s, results r, stundet t
  WHERE s.sid=r.sid
  and t.id = r.id 
  GROUP BY r.sid, s.sname, t.name
  ORDER BY r.sid
连德水
2023-03-14

您可以使用ROW_NUMBER()来标记每个科目得分最高的学生

SELECT st.name,
       sj.sname,
       r.marks
  FROM (SELECT id,
               sid,
               marks,
               ROW_NUMBER() OVER (PARTITION BY sid 
                                      ORDER BY marks DESC) maxmarks
          FROM results) r
  JOIN students st
    ON r.id = st.id
  JOIN subjects sj
    ON r.sid = sj.sid
 WHERE r.maxmarks = 1
 类似资料:
  • 我有两个表,一个有212,000条记录(不推荐使用的记录),另一个有10,500,000条记录 在删除记录之前使用外部联接有意义吗?我在想,如果可能的话,这可以帮助我跟踪被删除的内容

  • 问题内容: 我有一个表,其中包含商店中每件商品的单价和其他详细信息。 另一个包含每个订单中包含的项目的详细信息。 现在我要计算 请注意,我希望它成为表本身的一部分,而不是作为其他视图或查询。我怎样才能做到这一点?我为此研究了触发器和其他机制,但是它们是否适用于不同表中的值,尤其是在存在此类约束的情况下? 我尝试过根据另一列计算出的Column进行以下触发吗?: 但这似乎没有用 问题答案: 这是如何

  • 问题内容: 我有看起来像这样的数据: 流程将定期运行并为每个实体评分。该过程将生成数据并将其添加到得分表中,如下所示: 我希望能够为每个实体选择所有实体以及最新记录的分数,从而得到如下所示的一些数据: 我可以使用以下查询获取单个实体的数据: 但是我不知道如何为所有实体选择相同的内容。也许它正盯着我看? 非常感谢您抽出宝贵的时间。 感谢您的好评。我将花几天时间查看首选解决方案是否冒泡,然后选择答案。

  • 问题内容: 如何在用户类中打开数据库连接,我可以在其中进行数据库操作?以及为什么需要在DBConnection类中定义内置的已创建函数。 我创造了 db.php user.php result.php 在db.php中 在User.php中 在result.php $conn->real_escape_string(trim(strip_tags($_POST[‘username’]))); $e

  • 问题内容: 我有以下问题。我想加入两个表。 第一个表具有如下条目: 第二个表是这样构建的: 我的结果应显示以下内容 我只是不知道如何解决这个问题。 仅使用sql selects可能需要此功能吗? 亲切的问候 问题答案: 并不是那么困难,但是-就像你被告知的那样,你宁愿不要那样做。

  • 问题内容: 我已经阅读了很多有关如何更新多列的文章,但仍然找不到正确的答案。 我有一张桌子,我想从另一张桌子更新这张桌子。 如果我只运行select语句(在方括号之间),则脚本返回值,但无法使用update 问题答案: TSQL不支持行值构造函数。改用这个: