2017-09-04 119 views
-2

我有这样的数据:更新或插入不同的条件

user_id   id_game   level    score 
10     1     1     200 
10     1     1     400 
10     1     2     500 
10     2     1     230 
11     1     1     345 

这个数据我想迁移到一个新的表,这个想法是,如果水平,id_game和USER_ID已经插入,我看向最高分。因此,对于这个例子,我想保存:

user_id   id_game    level    score 
10     1     1     400 
10     1     2     500 
10     2     1     230 
11     1     1     345 

我想在一个单独的SQL做的,我试过somethink这样的:

INSERT INTO %s (user_id, id_game, level, score) 
         VALUES (%d, %d, %d, %d) ON DUPLICATE KEY UPDATE user_id = %d, id_game = %d, score = %d. 

但不起作用。你能帮我吗 ?

+3

*但不工作*的意思?有什么错误? – Jens

+0

使用聚合MAX()函数和GROUP BY的查询可能会有所帮助;但基于的关键是什么? –

+0

@MarkBaker如果指定用户的分数较大,id_game,我们更新分数,如果不存在指定用户,id_game,我们插入的级别 – user7424312

回答

1
SELECT user_id 
    , id_game 
    , level 
    , MAX(score) score 
    FROM this_data 
GROUP 
    BY user_id 
    , id_game 
    , level; 
0

它是一个简单的查询。

CREATE TABLE <TARGET_TABLE_NAME> SELECT USER_ID,ID_GAME,LEVEL,MAX(SCORE) FROM <SOURCE_TABLE_NAME> GROUP by 1,2,3;