我有一个包含6列的表:id
,a
,b
,c
,d
,e
。 id
是主键。
我正在尝试为该组检索不同的a,b,c,max(d),并且与max(d)在同一行中的e是(列“id”与我的查询无关)
我尝试了这个查询:
SELECT a, b, c, MAX(d), e
FROM tablename
GROUP BY a, b, c;
但是它给了我“选择列表中的表达式无效(不包含在聚合函数或GROUP BY子句中)。”如果我添加一个额外的GROUP BY e,它只给我一个不同的a,b,c,e,每个都有一个MAX(d),这不是我需要的。我明白为什么会发生这种情况,我不明白的是如何让它做我需要的......
子查询是否可行?你能帮我写一个吗?
最令人沮丧的是我的查询可以在MySQL中运行:(
答案 0 :(得分:1)
SELECT t1.a,t1.b,t1.c,t1.d,t1.e
FROM tablename AS t1
INNER JOIN (SELECT a, b, c, MAX(d) d
FROM tablename
GROUP BY a, b, c
) AS t2
ON t1.a = t2.a
AND t1.b = t2.b
AND t1.c = t2.c
AND t1.d = t2.d
请注意,如果MAX(d)
绑定了多行,则此查询将返回a,b,c
值为d
的所有行。
我不知道MySQL在这种情况下如何处理重复的行。