gpt4 book ai didi

sqlite - SQL - 删除具有空值的重复项 WITHOUT row_number

转载 作者:行者123 更新时间:2023-12-05 03:30:00 25 4
gpt4 key购买 nike

我正在使用 SQLite,我有下表 x,其中包含大约 30 万行,这是一个示例:

<表类="s-表"><头>名字姓氏昵称<正文>珍妮弗母鹿珍妮珍妮弗母鹿空珍妮弗母鹿珍妮

每一行都有 Name、Surname 和 Nickname 值,其中 Nickname 也可以为 NULL。没有一个值是唯一的,也没有键。我想要做的是删除 Nickname 为 NULL 的“重复项”,同时按 Name-Surname 对对它们进行分组,同时删除“实际”重复项。

这将是预期的输出:

<表类="s-表"><头>名字姓氏昵称<正文>珍妮弗母鹿珍妮

我试过使用以下查询:

select x.* 
from (select x.*,
row_number() over (partition by name, surname order by nickname nulls last) as seqnum
from x)
) x
where seqnum = 1;

但不幸的是我得到一个错误:

near "(": syntax error

我已经搜索了几天来寻找答案,但我仍然无法弄清楚。如果重要的话,我正在使用 SQLite3。我仍然不确定为什么会出现语法错误,我认为它与 row_number() 有关,但根据我在网络上的搜索,它应该支持 sqlite3(在我的例子中这不是我所理解的)

所以现在我正在寻找一种方法来修改此查询以获得所需的输出,但我已经好几天都无能为力了...

如有任何帮助,我们将不胜感激!

最佳答案

除非您已经创建了表 WITHOUT ROWID , 有一列 rowid在表中充当主键。

您可以使用聚合来获取不应删除的 namesurname 的每个组合的最小 rowid:

DELETE FROM tablename
WHERE rowid NOT IN (
SELECT COALESCE(
MIN(CASE WHEN nickname IS NOT NULL THEN rowid END),
MIN(rowid)
)
FROM tablename
GROUP BY name, surname
);

参见 demo .

关于sqlite - SQL - 删除具有空值的重复项 WITHOUT row_number,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70919922/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com