首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何根据另一列的最大值获取一个列的多个值?

如何根据另一列的最大值获取一个列的多个值?
EN

Stack Overflow用户
提问于 2015-07-02 13:47:42
回答 2查看 40关注 0票数 0

所以我有这张桌子

我想“打印”那些在同一学期的人的姓氏,但他们的分数最多比他们学期的最高分低2分。例如,在第四学期中,所需的姓氏是"Παπαβασιλείου“(最高年级= 9)和"Βαλκανιώτης”(年级=7Βαλκανιώτης(9-2))。

我所做的是这段代码,但它不符合我的标准

代码语言:javascript
运行
复制
SELECT GRADE as GRADE, SURNAME FROM pinakas2 
WHERE GRADE >= ((SELECT MAX(GRADE) FROM pinakas2) - 2) 
GROUP BY SEMESTER ORDER BY GRADE DESC

其结果是:

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-07-02 13:51:41

删除GROUP BY,改为执行ORDER BY semester

代码语言:javascript
运行
复制
SELECT GRADE as GRADE, SURNAME
FROM pinakas2 
WHERE GRADE >= ((SELECT MAX(GRADE) FROM pinakas2) - 2) 
ORDER BY SEMESTER, GRADE DESC

如果您希望每个学期的最高分数减去2,则执行相关的子查询:

代码语言:javascript
运行
复制
SELECT GRADE as GRADE, SURNAME
FROM pinakas2 p1
WHERE GRADE >= ((SELECT MAX(GRADE) FROM pinakas2 p2
                 where p1.semester = p2.semester) - 2) 
ORDER BY SEMESTER, GRADE DESC
票数 1
EN

Stack Overflow用户

发布于 2015-07-02 13:57:12

首先,您需要一个子查询来查找本学期的最高成绩,如下所示:

代码语言:javascript
运行
复制
        SELECT MAX(GRADE) GRADE, SEMESTER
          FROM pinakas2
         GROUP BY SEMESTER

然后你需要用它来检索你想要的学生:

代码语言:javascript
运行
复制
  SELECT a.GRADE, a.SURNAME, a.SEMESTER
    FROM pinakas2 a
    JOIN (
        SELECT MAX(GRADE) GRADE, SEMESTER
          FROM pinakas2
         GROUP BY SEMESTER
         ) b ON a.SEMESTER = b.SEMESTER AND a.GRADE >= b.GRADE - 2
   ORDER BY a.SURNAME, a.GRADE 

如果出于某种原因,你不关心发生这种情况的学期,那就选择这样做。

代码语言:javascript
运行
复制
  SELECT DISTINCT a.GRADE, a.SURNAME
    FROM pinakas2 a
    JOIN (
        SELECT MAX(GRADE) GRADE, SEMESTER
          FROM pinakas2
         GROUP BY SEMESTER
         ) b ON a.SEMESTER = b.SEMESTER AND a.GRADE >= b.GRADE - 2
   ORDER BY a.SURNAME, a.GRADE 
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31186405

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档