题目:
一个月统计一次每个雇员去了哪些国家
user_name region
tom india
jerry usa
mike england
marry holland
但是有一张汇总表
user_name least_region arrived_region_count
雇员名 最新去的国家 已经到过多少个国家
tom india 4
jerry usa 6
mike england 10
marry holland 11
已经到过多少个国家
的计算规则是 如果上个月 这个表的数据还是
user_name least_region arrived_region_count
雇员名 最新去的国家 已经到过多少个国家
tom greece 3
jerry sweden 4
mike switchland 9
marry germany 10
例如tom上个月还只到了3个国家,那么这个月需要就是 3+1,因为tom这个月又去了一个新的国家,印度。
解答:
/*
用user_name字段将a和b表关联,
若可关联到则将b表中的记录更新到a,
若没有关联到,则将b中“多出”的记录插入a表
*/
MERGE agg_table a
USING month_table m
ON (a.user_name = m.user_name) --用user_name字段将a和b表关联,
WHEN MATCHED THEN --若可关联到则将b表中的记录更新到a
UPDATE
SET last_region = m.region,
arrived_region_count = arrived_region_count + 1
WHEN NOT MATCHED THEN --若没有关联到,则将b中“多出”的记录插入a表
INSERT
(user_name, least_region, arrived_region_count)
VALUES
(m.user_name, m.region, 1);