MySQL: GROUP_CONCAT с ORDER BY COUNT? - PullRequest
       17

MySQL: GROUP_CONCAT с ORDER BY COUNT?

1 голос
/ 18 августа 2011

Возможно ли это?

Допустим, у меня есть список адресов с множеством повторяющихся записей. Мне нужно отфильтровать все дубликаты, потому что некоторые адреса имеют несколько разные имена, но одинаковый почтовый индекс и номер телефона.

Сначала я делаю GROUP BY по почтовому индексу и телефону.

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

Но тогда я получаю случайные имена. Я хотел бы получить имя best , то есть имя с наибольшим количеством записей на один почтовый индекс / телефон.

Так что я подумал о следующем. Здесь я использую функцию 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 голосов
/ 18 августа 2011

Сам нашел решение с помощью подзапроса:

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

Интересно, можно ли это сделать без подзапроса.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...