Страницы

Поиск по вопросам

четверг, 2 января 2020 г.

Mysql найти записи которые имеют одинаковое значение поля до определенного символа

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

Комментариев нет:

Отправить комментарий