有没有一种方法可以根据不完全相同的值在 SQL 中组合相似的行?

Posted

技术标签:

【中文标题】有没有一种方法可以根据不完全相同的值在 SQL 中组合相似的行?【英文标题】:Is There a Way to Combine Similar Rows in SQL Based on a Value That Isn't Exactly the Same? 【发布时间】:2022-01-09 10:06:10 【问题描述】:

我有一个 SQL 表,您可以在其中添加品牌名称,当添加新品牌名称时,它会增加现有品牌活跃计数或创建新品牌名称。

问题是,如果有人添加了一个拼写不同的新品牌(例如添加了 Toyota,但拼写为 toyota),它会创建一个具有新活动计数和新品牌 ID 的新品牌。既然表中有几个这样的实例,有没有办法我可以用 SQL 进行排序并合并相似的品牌?我知道这最终会删除几行,我不确定 SQL 是否有能力一次性完成所有操作。

我对 SQL 还是比较陌生,因此我们非常感谢任何有关此方面的建议。我听说使用 Python Pandas 会更容易,所以我目前正在研究一种方法来做到这一点。

【问题讨论】:

处理这个问题的正常方法是在 UI 层:使添加新品牌变得更加困难(显示确认以确保)并且更容易与现有品牌匹配(自动完成,因此使用现有品牌少打字)。 collation 应该是case insensitive 【参考方案1】:

如果是简单的大小写更改,您可以使用 LOWER() 之类的函数将它们全部转换为小写,然后根据品牌名称将结果组合在一起, 但是,您的问题是“相似”的记录,其中相似的定义不是很好。 SQL 语言希望您清楚地定义您需要什么

如果您要修复一个/几个字符,您可以使用带有百分比 (%) 和 / 或下划线 (_) 符号的 LIKE operator。您可以通过在不同位置放置%_ 来定义您想要识别的所有错误排列。或者,您也可以在 mysql 中探索 SOUNDEX function 或 sounds like,看看是否可以基于 SOUNDEX 合并品牌名称。

如果数据不是很大,我会建议你创建另一个表/临时表来执行这样的操作。这样,您始终可以参考原始数据。

【讨论】:

以上是关于有没有一种方法可以根据不完全相同的值在 SQL 中组合相似的行?的主要内容,如果未能解决你的问题,请参考以下文章

SQL:根据另一列的值在列上保留一个具有最大值的行

EXCEL如何将两列中相同的行筛选出来并排序

如果相同的列值在多行中重复,则 UPDATE - SQL / MYSQL

T-SQL - 有没有一种方法可以根据表中指定值的行数动态输出列?

如何用sql实现自动填充日期

jquery 进度条,根据指定的值在进度条中显示。各位有没有例子或相关例子。 如下图:想要动态的