我知道我们可以使用GROUP BY
和HAVING COUNT > 1
。但是,当您有重复数据时,这会有效。我有一些不同的数据。
Id Names
1 Rahul S
2 Rohit S
3 Rishu
4 Sinu
5 Rahul S
6 Rohit S
在上表中,id 1和5相同,2和6也相同。但是当我使用group by时,因为空格而算不同。那么如何用模糊逻辑编写一个会返回这些重复数据的查询。
**更新
有人可以帮我查询一个查询,该查询将从特定列中删除空格并添加一个虚拟列,我们可以通过计数>来对其进行分组1
SELECT replace(ltrim(rtrim(name)),' ','') as no_space FROM table GROUP BY no_space HAVING count(*) > 1 ORDER BY no_space;
答案 0 :(得分:1)
您可以使用REPLACE功能删除空格。
我会将没有空格的字符串保存到新列中并使用group by。 像:
Select <values you are looking for>, replace(Names, ' ', '') as d
from <Table name>
group by d
答案 1 :(得分:0)
您是否尝试在选择数据时删除空格?
这样做应该剪切字符串中的空格,并提供类似的数据。请记住,我的意思是删除双空格并用1个空格替换它,然后对数据进行左右修剪
这样的事情:
REPLACE(LTRIM(RTRIM(colName)), ' ', ' ')
请记住包括有计数&gt; 1
答案 2 :(得分:0)
你可以使用修剪
SELECT trim(name),trim(count(name))FROM tablename
group by trim(name)
答案 3 :(得分:0)
我创建了表格并插入了你的数据。试试这个:
DROP TABLE IF EXISTS Emp;
CREATE TABLE Emp (Id INT, Name VARCHAR(50));
INSERT INTO Emp (Id, Name) VALUES
(1, 'Rahul S'), (2, 'Rohit S'), (3, 'Rishu'), (4, 'Sinu'), (5, ' Rahul S'),(5, 'Rohit S');
select * from Emp Group by Name Having Name like '%Rohit%S%'
Id Name
1 5 Rohit S
2 2 Rohit S
使用通配符进行查询:
select * from Emp Group by Name Having Name like '%_____%_%'
Id Name
1 5 Rahul S
2 1 Rahul S
3 5 Rohit S
4 2 Rohit S