sql – 查找年差的最大值

我这里有两张桌子

BIODATA
ID                    NAME
1                     A
2                     B

YEAR
ID                    JOIN YEAR            GRADUATE YEAR
1                     1990                 1991
2                     1990                 1993

我已经用过

select 
    NAME, 
    max(year(JOIN_YEAR) - year(GRADUATE_YEAR)) as MAX 
from 
    DATA_DIRI 
right join DATA_KARTU 
    ON BIODATA.ID = YEAR.ID;

但结果变成了:

+--------+------+
| NAME   | MAX  |
+--------+------+
| A      | 3    |
+--------+------+

我已经尝试了很多不同类型的连接,但我仍然无法找到NAME如何成为“B”.有人可以帮帮我吗?非常感谢

最佳答案 如果您同时在选择集中使用聚合和非聚合,则用于非聚合字段的行基本上是随机选取的.

基本上,max是如何工作的 – 它通过查询收集每个组的所有行(如果没有group by,all all),计算max并将其放入结果中.

但是因为你也放入了一个非聚合字段,它需要一个值 – 所以SQL所做的只是选择一个随机行.你可能会想’好吧,为什么它不选择同一行max?’但如果你使用avg或count怎么办?它们没有与之关联的行,因此它能做的最好是随机选择.这就是为什么这种行为一般存在的原因.

您需要做的是使用子查询.类似于从data_diri d1中选择d1.id,其中d1.graduate_year – d1.join_year =(选择max(d2.graduate_year – d2.join_year from data_diri d2))

点赞