我正在尝试在Hadoop服务器上使用SQL查询来提取数据。我有两个表:

11

a  | b | c
10  143  a
23  163  g
24  536  r
55  475  a

t2
d  |  e |
143  bob
086  jim
536  jim
475  bob

我正在尝试根据共同的列t1.b = t2.d将t1与t2合并,然后将值按e(bob,jim等)分组,然后从中拉出a的最大值。 (jims的max(a)为24,bob的max(a)为55)。

到目前为止,我能够加入e并按e分组,但是由于GROUPBY函数正在寻找它,因此无法让b打印出来。它声明它不是一个聚合函数。我如何使它正常运行,以便能够查询和检索表示max(a),b和e的表。
SELECT max(a) as max_a, e
FROM (t1 left join t2 on t1.b=t2.d)
GROUP BY e

这满足了我的需要,但无法使b列显示而没有错误。

谢谢

最佳答案

我认为您不需要group by。我认为您想要窗口功能:

SELECT t.*
FROM (SELECT t1.*, t2.e,
             row_number() over (partition by t2.e order by t1.a desc) as seqnum
      FROM t1 left join
           t2
           on t1.b = t2.d
     ) t
WHERE seqnum = 1;

关于sql - SQL如何使用JOIN和GROUPBY显示MAX函数的匹配情况,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/54448731/

10-15 20:32