我这里有两张桌子
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))