如何在 bigquery sql 中匹配多列中的值并替换为多列中的新值?
How to match values from multiple columns and replace with new values in multiple columns in bigquery sql?
我的主要 table 数据由媒体、网络组成,需要通过与这 3 列中的值完全匹配来重命名字典中 3 列中的值 table。我如何在 bigquery sql 中执行此操作?
我目前有一本字典 table,其中包含如下数据:
medium
network
name
newMedium
newNetwork
newName
CPI
FBIg
campaignA
CPC
meta
campaignA
flyering
offline
flyerA
offline
flyering
flyerA
和主要 table 这样的:
medium
network
name
date
cpc
meta
campaignA
2022-05-01
CPI
FBIg
campaignA
2022-03-01
offline
flyering
flyerA
2022-04-01
flyering
offline
flyerB
2022-04-02
flyering
offline
flyerA
2022-04-03
进入
medium
network
name
date
cpc
meta
campaignA
2022-05-01
CPC
meta
campaignA
2022-03-01
offline
flyering
flyerA
2022-04-01
flyering
offline
flyerB
2022-04-02
flyering
offline
flyerA
2022-04-03
因此它将匹配媒体、网络、名称并将所有值替换为 newMedium、newNetwork、newName。
我想这个查询就是你要找的:
SELECT
COALESCE(dict.newMedium, main.medium) medium
, COALESCE(dict.newNetwork, main.network) network
, COALESCE(dict.newName, main.name) name
, main.date
FROM
main_table main
LEFT JOIN dictionary_table dict
ON (main.medium = dict.medium AND main.network = dict.network AND main.name = dict.name)
基本上,只需 LEFT JOIN 两个表。这样做,non-matching 个字段将是 NULL
。这样,您可以使用 COALESCE
来使用 newField
,如果它存在,或者 main.field
否则。
我的主要 table 数据由媒体、网络组成,需要通过与这 3 列中的值完全匹配来重命名字典中 3 列中的值 table。我如何在 bigquery sql 中执行此操作?
我目前有一本字典 table,其中包含如下数据:
medium | network | name | newMedium | newNetwork | newName |
---|---|---|---|---|---|
CPI | FBIg | campaignA | CPC | meta | campaignA |
flyering | offline | flyerA | offline | flyering | flyerA |
和主要 table 这样的:
medium | network | name | date |
---|---|---|---|
cpc | meta | campaignA | 2022-05-01 |
CPI | FBIg | campaignA | 2022-03-01 |
offline | flyering | flyerA | 2022-04-01 |
flyering | offline | flyerB | 2022-04-02 |
flyering | offline | flyerA | 2022-04-03 |
进入
medium | network | name | date |
---|---|---|---|
cpc | meta | campaignA | 2022-05-01 |
CPC | meta | campaignA | 2022-03-01 |
offline | flyering | flyerA | 2022-04-01 |
flyering | offline | flyerB | 2022-04-02 |
flyering | offline | flyerA | 2022-04-03 |
因此它将匹配媒体、网络、名称并将所有值替换为 newMedium、newNetwork、newName。
我想这个查询就是你要找的:
SELECT
COALESCE(dict.newMedium, main.medium) medium
, COALESCE(dict.newNetwork, main.network) network
, COALESCE(dict.newName, main.name) name
, main.date
FROM
main_table main
LEFT JOIN dictionary_table dict
ON (main.medium = dict.medium AND main.network = dict.network AND main.name = dict.name)
基本上,只需 LEFT JOIN 两个表。这样做,non-matching 个字段将是 NULL
。这样,您可以使用 COALESCE
来使用 newField
,如果它存在,或者 main.field
否则。