sqlite合并查询

时间:2011-09-14 13:16:06

标签: sql sqlite

我有一个简单的Android游戏的简单数据表(昵称,分数)。 最初我没有为每个昵称添加唯一的ID,现在我有多个来自同一昵称的条目。

我现在要做的是通过删除同一昵称中的“额外”条目来合并数据并保持各自的高分。

我正在尝试进行查询,但未成功。

你有什么建议来实现我需要的结果?

3 个答案:

答案 0 :(得分:1)

如何使用此查询创建新表并添加条目。

INSERT INTO newscorestable(nickname, score) 
SELECT nickname, max(score) 
FROM oldscorestable GROUP BY nickname

删除旧表

此查询集应该这样做(假设原始表名为分数)。

CREATE TABLE scores2 AS 
       SELECT nickname, max(score) as score FROM scores GROUP BY nickname;

DELETE FROM scores;

INSERT INTO scores SELECT nickname, score FROM scores2;

DROP TABLE scores2;

/* to free unused space */
VACUUM;

答案 1 :(得分:1)

我想你想这样做:

create table temptable (nickname varchar(50), score int);

insert into temptable (nickname, score)
select nickname, max(score)
from yourtable
group by nickname;

delete from yourtable;

insert into yourtable (nickname, score)
select nickname, max(score)
from temptable;

然而,如果我是你,我不会删除分数。您可以跟踪每个分数,然后只查询您想要的内容。

想获得前10名的高分吗?这里:

select nickname, score
from yourtable
order by score desc
limit 10

想要每个用户的高分?这里:

select nickname, max(score)
from yourtable
group by nickname;

总体建议: 跟踪所有内容,相应地进行查询

答案 2 :(得分:0)

尝试以下内容(我目前没有安装SQLite来测试相关子查询的精确语法):

 DELETE FROM Scores WHERE EXISTS 
    (SELECT * FROM Scores S2 
     WHERE S2.nickname = nickname AND S2.score > score)

或(这是正确的,感谢danishgoel在下面的评论中进行测试)

 DELETE FROM Scores WHERE EXISTS 
    (SELECT * FROM Scores S2 
     WHERE S2.nickname = Scores.nickname AND S2.score > Scores.score)

对于一次性使用几千个昵称应该是完全有效的。

如果您对给定的昵称有两个相同的分数,这将留下重复的内容,这可能吗?