是否可以从客户表中选择不同的公司名称,还可以显示与iD相关的公司名称?
在我使用
的那一刻digit
返回
SELECT company,id, COUNT(*) as count FROM customers GROUP BY company HAVING COUNT(*) > 1;
但我所追求的是每个人的所有重复ID。
所以
MyDuplicateCompany1 64 2
MyDuplicateCompany2 20 3
MyDuplicateCompany6 175 2
或每行一行
CompanyName, TimesDuplicated, DuplicateId1, DuplicateId2, DuplicateId3
这可能吗?
答案 0 :(得分:2)
不确定这是否可以接受,但mySQL中有一个函数允许您将多行合并为一个Group_Concat(Field),但是为指定的列显示每条记录的不同值(如此中的ID)情况下)
SELECT company
, COUNT(*) as count
, group_concat(ID) as DupCompanyIDs
FROM customers
GROUP BY company
HAVING COUNT(*) > 1;
SQL Fiddle 显示与一个字段中列出的重复公司类似的结果。
如果您需要多列或多行,您可以将上面的内容包装为内联视图,然后将其连接回名称上的客户,以列出重复项和重复的时间。
答案 1 :(得分:1)
您可以使用GROUP_CONCAT(id)
以逗号连接您的ID,您的查询应为:
SELECT company, GROUP_CONCAT(id) as ids, COUNT(id) as cant FROM customers GROUP BY company HAVING cant > 1
您可以使用此
测试查询CREATE TABLE IF NOT EXISTS `customers` (
`id` int(11) NOT NULL,
`company` varchar(50) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
INSERT INTO `customers` (`id`, `company`) VALUES
(1, 'MyDuplicateCompany1'),
(2, 'MyDuplicateCompany1'),
(3, 'MyDuplicateCompany1'),
(4, 'MyDuplicateCompany2'),
(5, 'MyDuplicateCompany2'),
(6, 'MyDuplicateCompany3'),
(7, 'MyDuplicateCompany3'),
(8, 'MyDuplicateCompany3'),
(9, 'MyDuplicateCompany3'),
(10, 'MyDuplicateCompany4');
输出:
了解详情: http://monksealsoftware.com/mysql-group_concat-and-postgres-array_agg/
答案 2 :(得分:0)
您不是在寻找拥有超过1个条目(GROUP BY company
)的公司,而是要查找重复的公司ID(GROUP BY company, id
):
SELECT company, id, COUNT(*)
FROM customers
GROUP BY company, id
HAVING COUNT(*) > 1;
答案 3 :(得分:0)
如果没有GROUP_CONCAT()
SELECT
company, id,
( SELECT COUNT(*) from customers AS b
WHERE a.company = b.company
) AS cnt
FROM customers AS a
GROUP BY company, id
HAVING cnt > 1
;
注意:GROUP_CONCAT
做同样的事情,每个公司只有一行。