当连接两个表并满足条件时如何删除重复的行

问题描述 投票:0回答:2

我在BigQuery中有两个表,其以下各栏

t1

timestamp |customer_id |office |client_name
01.01.2020|1           |USA    |Mike
01.01.2020|2           |USA    |John
01.01.2020|3           |GER    |Jenny`

t2

timestamp |customer_id |agent_id |agent_role
01.01.2020|1           |10       |Level1
01.01.2020|1           |20       |Level2
01.01.2020|2           |30       |Level1`

现在当我加入这两个表时

SELECT DISTINCT t1.timestamp, t2.customer_id, office, client_name,
        CASE WHEN role = "Leve1" THEN agent_id ELSE NULL END
        AS responsible_agent, 
FROM t1 
   LEFT JOIN t2 ON t1.customer_id = t2.customer_id

我得到下表

t3

timestamp |customer_id |office |client_name|agent_id
01.01.2020|1           |USA    |Mike       | 10
01.01.2020|1           |USA    |Mike       |null
01.01.2020|2           |USA    |Jenny      | 30`

如果分配了1级,我的新表(t3)应该显示agent_id,如果没有分配1级,则显示null。正如您在t3中看到的那样,我获得了两个customer_id = 1的记录,因为customer_id = 1分配了agent_role = 1级,还分配了agent_role = 2级。

t3

timestamp |customer_id |office |client_name|agent_id
01.01.2020|1           |USA    |Mike       | 10
01.01.2020|1           |USA    |Mike       |null

我的任务是加入t1和t2 ..如果存在Level 1,则显示agent_id;如果未分配Level 1,则显示null;由于分配了Level 2,请删除显示为null的那些。

mysql sql google-bigquery
2个回答
0
投票
SELECT DISTINCT t1.timestamp, t1.customer_id, office, client_name,t2.agent_id 
FROM t1 
LEFT JOIN t2 ON t1.customer_id = t2.customer_id AND t2.agent_role = 'Level1'

0
投票

如果我理解正确:

SELECT t1.timestamp, t1.customer_id, t1.office, t1.client_name,
       COALESCE(MAX(CASE WHEN t2.role = 'Leve1' THEN t2.agent_id END) , 
                MAX(t2.agent_id)
               ) AS responsible_agent,
FROM t1 LEFT JOIN
     t2
     ON t1.customer_id = t2.customer_id
GROUP BY t1.timestamp, t1.customer_id, t1.office, t1.client_name;
© www.soinside.com 2019 - 2024. All rights reserved.