sqlite合并查询
我有一个简单的android游戏数据表(昵称,分数)。 起初,我没有为每个昵称设置唯一的ID,现在我有多个来自同一昵称的条目 我现在想做的是,通过删除同一昵称中的“额外”条目来合并数据,并保持各自的高分 我试图提出一个查询,但没有成功sqlite合并查询,sql,sqlite,Sql,Sqlite,我有一个简单的android游戏数据表(昵称,分数)。 起初,我没有为每个昵称设置唯一的ID,现在我有多个来自同一昵称的条目 我现在想做的是,通过删除同一昵称中的“额外”条目来合并数据,并保持各自的高分 我试图提出一个查询,但没有成功 您建议如何实现我需要的结果?如何创建一个新表并使用此查询添加条目 INSERT INTO newscorestable(nickname, score) SELECT nickname, max(score) FROM oldscorestable GROUP
您建议如何实现我需要的结果?如何创建一个新表并使用此查询添加条目
INSERT INTO newscorestable(nickname, score)
SELECT nickname, max(score)
FROM oldscorestable GROUP BY nickname
以及删除旧表
这个查询集应该可以做到这一点(假设原始表名是scores)
尝试以下操作(我目前没有安装SQLite来测试相关子查询的精确语法):
或者(这是正确的,多亏danishgoel在下面的评论中进行了测试)
对于超过几千个昵称的一次性使用,应该是完美的
如果给定昵称有两个相同的分数,这会给您留下重复的分数,这可能吗?我想您应该这样做:
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;
想要每个用户的高分吗?在这里:
select nickname, score
from yourtable
order by score desc
limit 10
select nickname, max(score)
from yourtable
group by nickname;
总体建议:跟踪所有内容,相应地查询,这可能是一个选项,但我必须清除源表并从“结果”表复制数据,因为表名在游戏中是硬编码的。“这可能吗?”对于游戏?我猜:是的!!这不起作用,在sqlite.org的Delete语句中不支持表别名。此查询在
得分S1处出错,因为表别名S1是非法的。我在SQLite浏览器中尝试过,但在S1处出现错误。对不起,我目前使用的计算机上没有SQLite或任何工具。我正在编辑以提供一个没有别名的等效命令,根据规范,该命令应该是有效的,但是如果您愿意的话,我会要求您测试它。我已经测试过了,您的第二个查询,一个带有Scores.nickname的查询,运行得很好。第一个没有给出错误,但没有删除任何记录。感谢danishgoel对其进行测试,我现在正在做其他事情,因此无法测试它,但它看起来不错,关于删除别名的信息很好。
select nickname, max(score)
from yourtable
group by nickname;