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