MySQL:GROUP_CONCAT与ORDER BY COUNT?

时间:2011-08-18 00:12:08

标签: mysql count sql-order-by group-concat

这可能吗?

假设我有一个地址列表,其中包含大量重复条目。我需要过滤掉所有重复项,因为有些地址的名称略有不同,但邮政编码和电话号码相同。

首先,我在邮政编码和电话上进行GROUP BY。

SELECT name, address, postalcode, place, phone
FROM addresses
GROUP BY postalcode, phone

然后我得到随机名字。我想获得最佳名称,即每个邮政编码/电话的条目数最多的名称。

所以我想到了以下内容。这里我使用SUBSTRING_INDEX函数来获取group_concat中的第一个项目(没有名称中包含字符串'~~'):

SELECT SUBSTRING_INDEX(
         GROUP_CONCAT(DISTINCT name ORDER BY COUNT(name) DESC SEPARATOR '~~')
       , '~~', 1),
       address,
       postalcode,
       place,
       phone
FROM addresses
GROUP BY postalcode, telephone

但是我得到了'无效使用群组功能'。

如何按名称出现的次数让GROUP_CONCAT订购?

1 个答案:

答案 0 :(得分:0)

我自己找到了一个解决方案:子查询:

SELECT 
  SUBSTRING_INDEX(
    GROUP_CONCAT(DISTINCT name ORDER BY CountName DESC SEPARATOR '||')
  , '||', 1),
  address,
  postalcode,
  place,
  phone
FROM (

  SELECT name, address, postalcode, place, phone , COUNT(name) AS CountName
  FROM addresses
  GROUP BY name, postalcode, phone
  ORDER BY COUNT(name) DESC

) as a
GROUP BY postalcode, phone

我想知道是否可以在没有子查询的情况下完成。