简体   繁体   English

如何基于另一列的最大值获取一列的多个值?

[英]How to get multiple values of a column based on max value of another column?

So I have this table 所以我有这张桌子

在此处输入图片说明

I want to "print" the Surnames of those who are in the same semester but also their grade is maximum 2 points below their semester's highest grade. 我想“打印”同一学期但其成绩最高不超过其学期最高成绩2分的人的姓氏。 For example for the semester 4 the surnames needed are "Παπαβασιλείου" (highest grade = 9) and "Βαλκανιώτης" (grade = 7 >= (9 - 2)) 例如,对于第4学期,所需的姓氏是“Παπαβασιλείου”(最高成绩= 9)和“Βαλκανιώτης”(成绩= 7> =(9-2))

what I've done is this code but it does not satisfy my criteria 我做的是这段代码,但不满足我的条件

SELECT GRADE as GRADE, SURNAME FROM pinakas2 
WHERE GRADE >= ((SELECT MAX(GRADE) FROM pinakas2) - 2) 
GROUP BY SEMESTER ORDER BY GRADE DESC

It gives as a result this: 结果是:

在此处输入图片说明

Remove the GROUP BY , do ORDER BY semester instead: 删除GROUP BY ,而是改为按ORDER BY semester

SELECT GRADE as GRADE, SURNAME
FROM pinakas2 
WHERE GRADE >= ((SELECT MAX(GRADE) FROM pinakas2) - 2) 
ORDER BY SEMESTER, GRADE DESC

If you want highest grade per semester minus 2, do a correlated sub-query instead: 如果您希望每学期最高成绩减2,请执行相关子查询:

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

First you'll need a subquery to find out the highest grade in the semester, as follows: 首先,您需要一个子查询来找出本学期的最高成绩,如下所示:

        SELECT MAX(GRADE) GRADE, SEMESTER
          FROM pinakas2
         GROUP BY SEMESTER

Then you need to use that to retrieve the students you want: 然后,您需要使用它来检索所需的学生:

  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 

If for some reason you don't care about the semester in which this occurred, do this instead. 如果出于某种原因您不关心发生这种情况的学期,请改为这样做。

  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 

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM