mysql - 如何计算 MYSQL 中具有重复值的行数,同时考虑 REGEXP 或通配符?

标签 mysql sql

我正在使用此查询来计算表“books”中的所有行,其中“name”列值重复:

SELECT name, COUNT(*) c FROM books GROUP BY name HAVING c > 1

问题是,我想将非常相似的书名视为“重复”。例如,名为“好书”和“好书”的书。将被视为相同。我或多或少知道如何使用 REGEXP 和通配符,但我不知道如何将其合并到我正在使用的查询中(如果可能的话......)。

有什么办法可以实现这一点吗?

最佳答案

MYSQL 有一个名为 SOUNDEX 的字符串函数。这是一个很长的距离,但可能只是做你需要的。 SOUNDEX 应该为听起来相同的两个文本字符串返回相同的“代码字符串”。请参阅this link for more about SOUNDEX

所以你可以试试这个尺寸

SELECT SOUNDEX(name) as sname, COUNT(*) c FROM books GROUP BY sname HAVING c > 1

使用正则表达式,您需要更具体地说明您想要实现的效果,因为从询问中不清楚您是否只想删除标点符号,或者还有更多内容供您查看是否相似。

前瞻性的方法是添加另一列,例如 UNIFORM_NAME 并使用单独的工具/流程来填充该列,例如将项目添加到表中时。如果您计划多次运行此类查询,这将非常有用。然后,您可以针对这个新列使用您的 SQL 代码,如果您发明了一种新的(更好的)方法来协调比较名称,您可以根据名称和新算法更新该新列,并且您的解决方案的其余部分将起作用无需进一步更改。

关于mysql - 如何计算 MYSQL 中具有重复值的行数,同时考虑 REGEXP 或通配符?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45909013/

相关文章:

sql - 在 Netezza 中将带分数转换为 float

mysql - 使用 sum() 模拟行的 count()

mysql - 如何在不中断应用程序控制流的情况下调试 MySql 存储过程

mysql - 如何使用 pandas 替换 csv 文件中的 NAN 值,然后将其存储到 MySQL 中?

MySQL 无法插入 WHERE STR_TO_DATE IS NULL

Mysql:连接创建 View 重复行4次

sql - SET NOCOUNT ON 使用情况

php - 使用 Symfony sfDoctrineGuardPlugin,我需要有用户组和一些权限设置等

mysql - 查询以使用 order by 子句获取下一条记录

SQL Server 2008 FOR XML 路径帮助