数据库
首页 > 数据库> > MySQL:GROUP_CONCAT,ORDER BY COUNT?

MySQL:GROUP_CONCAT,ORDER BY COUNT?

作者:互联网

这可能吗 ?

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

首先,我在邮政编码和电话上进行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排序?

解决方法:

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

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

我想知道如果没有子查询就可以完成.

标签:mysql,count,sql-order-by,group-concat
来源: https://codeday.me/bug/20191013/1909085.html