MySQL:带有 ORDER BY COUNT 的 GROUP_CONCAT?
Posted
技术标签:
【中文标题】MySQL:带有 ORDER BY COUNT 的 GROUP_CONCAT?【英文标题】:MySQL: GROUP_CONCAT with an ORDER BY COUNT? 【发布时间】:2011-10-29 09:12:29 【问题描述】:这可能吗?
假设我有一个地址列表,其中包含很多重复条目。我需要过滤掉所有重复项,因为有些地址的名称略有不同,但邮政编码和电话号码相同。
首先我对邮政编码和电话进行 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 按名称出现的次数排序?
【问题讨论】:
address
和 place
会发生什么?它们也可能有不同的值,可能与返回的名称无关。
嗯,我使用邮政编码表从邮政编码中检查地址/地点,所以它基本上是我需要过滤的名称。 (在荷兰,每条街道都有不同的邮政编码)
【参考方案1】:
自己找到了一个解决方案,带有一个子查询:
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:带有 ORDER BY COUNT 的 GROUP_CONCAT?的主要内容,如果未能解决你的问题,请参考以下文章
java中如何实现mysql中的group by order by count()功能
mysql使用带有子查询的临时表,但不是group by和order by
MySQL 进阶 索引 -- SQL优化(插入数据优化:导入本地文件数据主键优化order by优化group by优化limit优化count优化update优化)