如何从同一行中的不同公司中选择数据?

时间:2015-11-17 15:43:33

标签: mysql sql database select

是否可以从客户表中选择不同的公司名称,还可以显示与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
这可能吗?

4 个答案:

答案 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');

输出:

enter image description here

了解详情: 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做同样的事情,每个公司只有一行。