admin

在Oracle SQL上仅排除一个MIN值

sql

我正在尝试选择一列(GameScore)中除最低值以外的所有值,但是当此最低值中有两个时,我的代码将这两个值都排除在外(我知道为什么这样做,我只是不知道确切如何更正它并包括两个最低值之一)。

代码看起来像这样:

SELECT Id, SUM(Score) / COUNT(Score) AS Score
FROM 
    (SELECT Id, Score
    FROM GameScore
    WHERE Game_No = 1
      AND Score NOT IN 
        (SELECT MIN(Score)
        FROM GameScore
        WHERE Game_No = 1
        GROUP BY Id))
 GROUP BY Id

因此,如果我从5个值中进行绘制,但是由于底部的两个相同,那么其中一行仅拉3分,我该如何包含第4个?谢谢。


阅读 168

收藏
2021-07-01

共1个答案

admin

为此,您必须以某种方式将它们分开;您当前的问题是,最低的2个分数相同,因此对两个值进行的任何(不等式)运算都会对另一个值进行相同的处理。

您可以使用诸如分析查询之类的方法ROW_NUMBER()来唯一标识行:

select id, sum(score) / count(score) as score
  from ( select id, score, row_number() over (order by score) as score_rank
           from gamescore
          where gameno = 1
                )
 where score_rank <> 1
 group by id

ROW_NUMBER()

以order_by_clause中指定的行的有序序列为唯一的编号分配给它要应用到的每一行(分区中的每一行或查询返回的每一行)。

由于ORDER BY子句按升序排列在SCORE上,因此最低分数之一将被删除。除非您将其他平局条件添加到ORDER BY,否则这将是一个随机值。

2021-07-01