我对SQL还是很陌生,这也许很容易,但是我一直在寻找一个可以成功解决此问题的问题。
我有一张桌子,我们称它为“客户”,如下所示:
**Customers**
-Customer_id
-Name
-Address
-City
-State
-Zip
-Phone
问题是它可能有重复的客户,所以我想编写一个查询,将列出所有其他客户,其中另一个客户使用相同的电话号码,并显示以下字段:>
客户名称,状态,电话,重复客户名称,重复 客户状态,客户电话重复
我尝试了以下语句,但它不起作用
SELECT Name, State, Phone FROM Customers
GROUP BY Phone
HAVING COUNT (Phone)>1;
我可以看到重复使用的电话号码
SELECT Phone FROM Customers
GROUP BY Phone
HAVING COUNT(Phone)>1
此外,正如建议的那样,我们不能假设它们在id字段中具有相同的值,因为这会模拟数据输入策略不佳的情况,并且id通常是自动分配的。
所以我认为这是我应该去的方向,并且可能使用“ AS”关键字来显示“重复的客户”字段,但是从这里我迷路了,希望您能以正确的方式指出我。谢谢。
答案 0 :(得分:2)
如果您要选择分组或汇总以外的其他列,则可以这样做
SELECT *
FROM Customers
WHERE Phone in
(
SELECT Phone
FROM Customers
GROUP BY Phone
HAVING COUNT(*) > 1
)
答案 1 :(得分:2)
如果Customer_id
具有相同的值,则可以使用exists
:
select c.*
from customers c
where exists (select 1
from customers c1
where c1.Phone = c.Phone and
c1.Customer_id <> c.Customer_id
);
答案 2 :(得分:0)
尝试使用EXISTS运算符
SELECT Name, State, Phone FROM Customers c
where EXISTS
(SELECT 1 FROM Customers c1 on c1.phone=c.phone
GROUP BY Phone
HAVING COUNT(Phone)>1)
答案 3 :(得分:0)
我首选的解决方案是Yogesh Sharma建议的exists
。但是,如果这不起作用,那么窗口函数是一个不错的选择:
select c.*
from (select c.*, count(*) over (partition by phone) as cnt
from customers c
) c
where cnt > 1