关于MERGE 的用法

来源:互联网 发布:劳德诺 知乎 编辑:程序博客网 时间:2024/05/16 03:42

题目:

一个月统计一次每个雇员去了哪些国家
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);

原创粉丝点击