Как выбрать второй столбец для строк, которые имеют дубликаты в первом столбце? - PullRequest
1 голос
/ 15 мая 2011

У меня есть таблица с двумя столбцами:

  • Город * * 1004
  • Страна

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

City
----------------
Chicago
New York
Toronto
London, Canada
London, England
Los Angeles

Примечание

Интересно отметить, что дубликаты названий городов «Лондона» включают запятую, пробел и название страны, чтобы различать их.

Как мне добиться этого с помощью оператора MySQL? Я попробовал несколько вещей, используя предложения group by и having, но не смог получить желаемый результат.

Ответы [ 5 ]

2 голосов
/ 15 мая 2011

Использование:

  SELECT a.city AS city
    FROM YOUR_TABLE a
GROUP BY a.city
  HAVING COUNT(a.country) = 1
UNION ALL
 SELECT CONCAT(b.city, ', ', b.country) AS city
   FROM YOUR_TABLE b
  WHERE EXISTS (SELECT NULL
                  FROM YOUR_TABLE c
                 WHERE c.city = b.city
              GROUP BY c.city
                HAVING COUNT(c.country) > 1)
ORDER BY city
1 голос
/ 15 мая 2011

принятый ответ вполне работоспособен. Это еще один способ решения проблемы:

   SELECT CASE
          WHEN repeated IS NULL THEN city
          ELSE                       city || ', ' || country
          END AS city
LEFT JOIN (SELECT city AS repeated
             FROM cities
         GROUP BY 1
           HAVING COUNT(1) > 1) d
          ON cities.city = d.repeated
1 голос
/ 15 мая 2011

Вы можете использовать следующие операторы SQL, предполагая, что имя таблицы в cityTable

    SELECT cityTable.City  , cityTable.Country  FROM cityTable INNER JOIN ( SELECT City FROM cityTable GROUP BY City HAVING COUNT(City) > 1 ) as tempTable ON cityTable.City = tempTable.City

    SELECT City FROM Table GROUP BY City HAVING  COUNT(City) = 1 

Первый запрос выдаст все дубликаты города с названием страны, а второй запрос выдаст все города, которые не повторяются только с названием города.

0 голосов
/ 16 мая 2011

Это не работает в MySQL, который еще не поддерживает управление окнами (AFAIK!), Но для записи, в СУБД, которая делает , вы можете сделать

SELECT CASE WHEN (count(*) > 1) THEN (city || ', ' || country) ELSE city END
OVER (PARTITION BY city)
FROM city_table;
0 голосов
/ 15 мая 2011
DELETE FROM table WHERE city IN (
SELECT city, 
 COUNT(city) AS NumOccurrences
FROM table
GROUP BY city
HAVING ( COUNT(city) > 1 )
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...