这可能吗?
假设我有一个地址列表,其中包含大量重复条目。我需要过滤掉所有重复项,因为有些地址的名称略有不同,但邮政编码和电话号码相同。
首先,我在邮政编码和电话上进行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订购?
答案 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
我想知道是否可以在没有子查询的情况下完成。