请建议SQL查询以查找不同商店的重复客户,例如customer表中有id,name,phone,storeid,我需要为以下内容编写查询:
表格数据:
id name phone storeid
-----------------------------------
1 abc 123 4
2 abc 123 4
3 abc 123 5
第一个查询应仅显示前2个记录,第二个查询应显示所有3个记录。
答案 0 :(得分:0)
您可以执行以下操作: -
SELECT Name,Phone, COUNT(Id) NumberOfTimes, StoreID
FROM Customers
GROUP BY Name,Phone,StoreID
HAVING COUNT(Id) > 1
ORDER BY StoreID
希望这有帮助。
答案 1 :(得分:0)
SELECT storeName, customerName FROM customer
WHERE id IN (
SELECT c.storeid
FROM customer 'c'
RIGHT JOIN store 's' ON (c.storeid = s.id)
GROUP BY c.storeid
HAVING COUNT(*) > 1
)
基本上,我们按商店进行分组,这使我们可以计算它们在客户表中出现的次数。我们得到了多次出现的情况的id,我们从customer表中选择storeName和CustomerName,其中包含我们从内部查询获得的id。
答案 2 :(得分:0)
您可以针对第一个查询尝试此操作:
SELECT *
FROM customer,
WHERE 1 < (
SELECT COUNT(name)
FROM customer
WHERE name IN (
SELECT name FROM customer
)
) AND
1 < (
SELECT COUNT(storeid)
FROM customer
WHERE storeid IN (
SELECT storeid FROM customer
)
);
现在,对于第二个查询,请使用上面的查询,但删除AND
之后的所有内容。
让我们一步一步查看查询:
SELECT *
FROM customer
这表明您需要customers表中的所有列。
WHERE 1 < (
SELECT COUNT(name)
FROM customer
WHERE name IN (
SELECT name FROM customer
)
)
这是一个非常长的查询,所以让我们从内向外看。
WHERE name IN (
SELECT name FROM customer
)
这一次,我们获取了客户的所有名称,并检查它们是否与我们的当前表格相匹配。说实话,我们可能不需要整个部分......
SELECT COUNT(name)
FROM customer
这表明我们想要在customers表中与where子句匹配的每个名称出现的总次数(count)。
WHERE 1 < (
....
)
在这里,我们将比较子查询的结果(重复名称的数量)并检查它是否大于l(即,存在重复)。
AND
.....
AND
关键字表示第二个条件必须为真 以及 以前的条件。
完整查询应返回名称和存储ID重复的所有条目;如果删除AND
之后和之后的所有内容,将导致所有条目具有相同名称但不一定是正确的商店ID。
另外两个答案是建议对重复数据进行分组,但在您的特定情况下,我认为您做希望根据您的预期结果重复输入(尽管您应该添加更多预期的输出信息) )。