Нужен запрос без подзапроса - MySQL

Узнай цену своей работы

Формулировка задачи:

Использую вот такой запрос чтобы узнать 'id' все повторяющихся значений в столбце 'ru' SELECT `id` , `ru` FROM `table` WHERE `ru` IN (SELECT `ru` FROM `table` GROUP BY `ru` HAVING count(*)>1); При количестве записей 1000 штук, запрос занимает 16 сек, но записей будет намного больше. Подскажите есть ли более быстрый способ получить id все повторяющизся значений средствами MySql? Например ------------------ ¦ id ¦ ru ¦ ------------------ ¦ 1 ¦ Вася ¦ ------------------ ¦ 2 ¦ Вася ¦ ------------------ ¦ 3 ¦ Миша ¦ ------------------ ¦ 4 ¦ Олег ¦ ------------------ ¦ 5 ¦ Олег ¦ ------------------ Нужно получить 1 Вася 2 Вася 4 Олег 5 Олег

Решение задачи: «Нужен запрос без подзапроса»

textual
Листинг программы
SELECT   GROUP_CONCAT(id) AS ids , ru, COUNT(*) AS cnt
FROM `table1`
GROUP BY ru
HAVING cnt > 1

Объяснение кода листинга программы

  1. SELECT - оператор выбора данных из базы данных.
  2. GROUP_CONCAT(id) - функция агрегирования, которая объединяет значения столбца id в одну строку, разделенную запятыми.
  3. AS - оператор присвоения псевдонима для вычисляемого столбца.
  4. ids - псевдоним для вычисляемого столбца, содержащего объединенные значения id.
  5. ru - название столбца, содержащего данные, которые будут группироваться.
  6. COUNT(*) - функция агрегирования, которая подсчитывает количество строк в каждой группе.
  7. cnt - псевдоним для вычисляемого столбца, содержащего количество строк в каждой группе.
  8. FROM - оператор указания источника данных.
  9. table1 - название таблицы, из которой берутся данные.
  10. GROUP BY - оператор группировки строк по указанному столбцу.
  11. ru - название столбца, по которому происходит группировка.
  12. HAVING - оператор фильтрации результатов агрегирования.
  13. cnt > 1 - условие, которое оставляет только те группы, в которых количество строк больше одного.
  14. ORDER BY - оператор сортировки результатов запроса.
  15. ru - название столбца, по которому происходит сортировка.
  16. DESC - направление сортировки - по убыванию.
  17. LIMIT - оператор ограничения количества возвращаемых строк.
  18. 20 - максимальное количество строк, которые будут возвращены.
  19. OFFSET - оператор пропуска первых указанных строк.
  20. 0 - количество строк, которые будут пропущены.

ИИ поможет Вам:


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

Оцени полезность:

8   голосов , оценка 4.125 из 5