我有一个简单的Android游戏的简单数据表(昵称,分数)。 最初我没有为每个昵称添加唯一的ID,现在我有多个来自同一昵称的条目。
我现在要做的是通过删除同一昵称中的“额外”条目来合并数据并保持各自的高分。
我正在尝试进行查询,但未成功。
你有什么建议来实现我需要的结果?
答案 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)
对于一次性使用几千个昵称应该是完全有效的。
如果您对给定的昵称有两个相同的分数,这将留下重复的内容,这可能吗?