#mysql #sql
Как с помощью mysql найти записи которые имеют одинаковое значение поля до определенного символа? Пример: [id] [value] 0 11#1 1 12#44 2 11#12 Вывод: [id] [value] 0 11#1 2 11#12 Символ конечно будет другой, как и другая структура таблицы.
Ответы
Ответ 1
не совсем понятно что вы имеете ввиду. Какой должен быть результат, например, на таких данных: id value 0 111#12313 1 22#fdsasd 2 22#qweert 3 33333#qwertrewq 4 111#werwr 5 22#qqqq 6 qweqweqw Вот запрос, который подсчитывает для каждой строки количество повторений подстроки до символа #: SELECT * FROM ( SELECT SUBSTR(value, 1, INSTR(value, '#')-1) as pref, COUNT(*) as cnt FROM tablename WHERE INSTR(value, '#') > 0 GROUP BY SUBSTR(value, 1, INSTR(value, '#')-1) /*HAVING COUNT(*) > 1*/ )T1 JOIN tablename T2 ON value LIKE CONCAT(pref, '#%') На приведённых выше данных запрос выдаст: id value pref cnt 0 111#12313 111 2 1 22#fdsasd 22 3 2 22#qweert 22 3 3 33333#qwertrewq 33333 1 4 111#werwr 111 2 5 22#qqqq 22 3 Если раскоментировать /*HAVING COUNT(*) > 1*/- то запрос выведет только те строки, префикс у которых неуникальный(повторяется как минимуму один раз). UPD: условие соединения заменил на value LIKE CONCAT(pref, '#%'), чтобы при наличии индекса по value - он использовался. При желании можно вообще обойтись без двух чтений из таблицы talename. В MySQL нет функции COUNT(*)OVER(PARTITION BY), однако это можно организовать с помощью переменных в запросе. В два этапа: сначала пронумеровать строки в каждой группе, потом найти максимум номера в группе.
Комментариев нет:
Отправить комментарий