Выборка уникальных значений и их сумма - MySQL
Формулировка задачи:
Доброго времени суток, имеется таблица, в котором содержится список городов:
Москва,
Москва,
Нижний Новгород,
Саров,
Арзамас,
Нижний Новгород и т.д.
Необходимо получить количество городов, то есть в данном случае нужно получить { Москва => 2, Нижний Новгород => 2, Саров => 1, Арзамас => 1 }
Можно ли вывести это одним запросом?
Решение задачи: «Выборка уникальных значений и их сумма»
textual
Листинг программы
SELECT city_name, COUNT(*) FROM ( SELECT translate(UPPER(regexp_replace(city_name,'\s+')),'АВСЕНКМОРТХУ','ABCEHKMOPTXY' ) city_name FROM MyTable ) GROUP BY city_name
Объяснение кода листинга программы
В этом коде:
translate(UPPER(regexp_replace(city_name,'\s+')),'АВСЕНКМОРТХУ','ABCEHKMOPTXY')- это функция, которая выполняет несколько операций над столбцомcity_nameиз таблицыMyTable. Сначала с помощью функцииUPPERвсе символы в столбце преобразуются в верхний регистр. Затем с помощью функцииregexp_replaceвсе пробелы в столбце заменяются на символ*. Наконец, с помощью функцииtranslateвсе символы в первой группе (АВСЕНКМОРТХУ) заменяются на соответствующие символы во второй группе (ABCEHKMOPTXY). Таким образом, в результате этой функции получается новая колонкаcity_name, в которой все названия городов приведены к определенному формату.SELECT city_name, COUNT(*)- это основная часть запроса. Здесь мы выбираем два столбца из подзапроса:city_nameиCOUNT(*).COUNT(*)считает количество записей в каждой группе, то есть количество уникальных значений в столбцеcity_name, которые были получены после применения функции из предыдущего шага.FROM MyTable- это указание, откуда нужно брать данные для выполнения запроса. В данном случае мы берем данные из таблицыMyTable.GROUP BY city_name- это указание, какие столбцы должны быть в итоговом результате запроса. В данном случае мы группируем данные по столбцуcity_name. Таким образом, этот запрос выбирает уникальные значения в столбцеcity_nameиз таблицыMyTableи подсчитывает их количество. При этом применяется функция для преобразования названий городов в определенный формат.