#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), однако это можно организовать с помощью переменных в запросе. В два этапа: сначала пронумеровать строки в каждой группе, потом найти максимум номера в группе.
Комментариев нет:
Отправить комментарий