Big Query 中的非重复值

Non-repeated values in Big Query

我是 SQL 的新手,所以这对大多数人来说可能是一个简单的解决方案,但我在 Big Query 中遇到了连接问题。我有两个表:

TABLE一个

id  name    purchases
1   alex    2
2   jane    7
3   peter   8
4   mario   1
5   luigi   6

TABLE B

id  name    visited
1   alex    jan
2   jane    jan
2   jane    feb
3   peter   jan
3   peter   feb 
3   peter   mar
4   mario   feb
5   luigi   mar

我希望我的最终结果每个 name/id 具有唯一的购买数量,因此如下:

TABLE C

id  name    visited   purchases
1   alex    jan       2
2   jane    jan       7
2   jane    feb       0
3   peter   jan       8
3   peter   feb       0
3   peter   mar       0
4   mario   feb       1
5   luigi   mar       6

但是,无论我执行什么连接,我最终都会得到每次匹配的每位用户的购买次数,如下所示:

id  name    visited  purchases
1   alex    jan      2
2   jane    jan      7
2   jane    feb      7
3   peter   jan      8
3   peter   feb      8
3   peter   mar      8
4   mario   feb      1
5   luigi   mar      6

从 Table 的 A 和 B 得到 Table C 的查询是什么? 谢谢。

一种方法是使用 row_number()

select b.*, coalesce(a.purchases, 0) purchases
from (
   select *, row_number() over(partition by id order by visited) rn
   from b ) b
left join a on a.id = b.id and b.rn=1

您可能希望根据排序要求将 visited 解码为序数,例如 .. order by case visited when 'jan' then 1 when .. end ..