问题描述
user_information 表具有唯一的 user_id。但是应用程序表包含每个用户的多条记录。我想获取他们的年龄、性别、收入值并合并到 user_information 表中。
下面的查询是我通常使用的 postgresql 查询。但我想在 Hivesql 中执行此任务。你能帮我解决这个问题吗。
SELECT
a.user_id,app.*
FROM
user_information u
LEFT JOIN (
SELECT distinct on (user_id)
age,gender,income
FROM
applications b
Where
user_id = u.user_id
) app ON TRUE
解决方法
使用 distinct on
代替 row_number()
:
SELECT a.user_id,a.*
FROM user_information u LEFT JOIN
(SELECT (user_id) a.*,ROW_NUMBER() OVER (PARTITION BY a.user_id ORDER BY <something> as seqnum
FROM applications a
) a
ON a.user_id = u.user_id AND seqnum = 1;
在 Postgres 中,您应该在使用 ORDER BY
时使用 DISTINCT ON
。但是,您的查询没有 ORDER BY
,因此缺少关键信息。
您应该在 ORDER BY
中包含一些内容来确定您想要的行。如果您不在乎,则需要 order by
子句。您可能可以使用常量 (ORDER BY NULL
) 或使用 user_id
。