powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Помогите составить запрос по макс. кол-ву совпадений
11 сообщений из 61, страница 3 из 3
Помогите составить запрос по макс. кол-ву совпадений
    #39039869
Фотография ПЕНСИОНЕРКА
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Akina,

6 полей*3поисковика=18 вариантов
а будет 9 или 10......................
-
------многое зависит от размера таблицы
...
Рейтинг: 0 / 0
Помогите составить запрос по макс. кол-ву совпадений
    #39039941
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ПЕНСИОНЕРКА, размер таблицы нам озвучен. 1к записей. 6 полей к сравнению. Значения от 1 до 50.
...
Рейтинг: 0 / 0
Помогите составить запрос по макс. кол-ву совпадений
    #39039972
hubble.tvv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
авторAkina,
Т.е. абсолютный приоритет - максимальная длина группы, а уже среди всех групп макс. длины - макс. количество записей в группе. Так?
Да, именно так.
Но, если возможно смотреть гибко, т.е., кроме максимального кол-ва записей в группе, а, допустим, 4 в 3-х записях, то это еще лучше.

авторAkina,
Итого 1000 записей, в каждой 6 значений в пределах от 1 до 50
Тоже верно.

Но, в общем-то, мой вопрос Cygapb-007 можно сказать решил. Если вы предложите более интересный вариант, то с удовольствием посмотрю ваше решение. Мне гораздо легче обучаться на примерах профессионалов.
...
Рейтинг: 0 / 0
Помогите составить запрос по макс. кол-ву совпадений
    #39039976
Cygapb-007
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hubble.tvvAkina,
3, 4, и 6а теперь я не понял...
допустим, есть таблица:rc1c2c3c4c5c611020304050121020304050233451112134345212223534531323363445414243
то есть, 5 чисел повторяются 2 раза, 3 числа повторяются 3 раза, в том числе 2 из них повторяются 4 раза, других повторов нет

Что является решением? 5 чисел? 3? 2?
...
Рейтинг: 0 / 0
Помогите составить запрос по макс. кол-ву совпадений
    #39039986
hubble.tvv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Cygapb-007а теперь я не понял...
Да, вы правы. Не так работает.
Приоритет - в результате должны быть 10, 20, 30, 40, 50.
...
Рейтинг: 0 / 0
Помогите составить запрос по макс. кол-ву совпадений
    #39039987
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Cygapb-007а теперь я не понял...
Вот та же фигня. Прискакал чел за советом, не зная точно, чего ему надо (или не умея до конца объяснить, что в общем одно и то же). Впрочем, не он первый... а, нам не привыкать, подробности вытрясем
...
Рейтинг: 0 / 0
Помогите составить запрос по макс. кол-ву совпадений
    #39039988
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ага... всё-таки длина - абсолютный приоритет.
Ну тогда решение верное, только сортировку взять другую, по количеству элементов, типа ORDER BY COUNT(g.c_val).
...
Рейтинг: 0 / 0
Помогите составить запрос по макс. кол-ву совпадений
    #39039996
hubble.tvv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
AkinaВот та же фигня. Прискакал чел за советом, не зная точно, чего ему надо (или не умея до конца объяснить, что в общем одно и то же). Впрочем, не он первый... а, нам не привыкать, подробности вытрясем
Посмотрел свои сообщения. Вроде бы все правильно я озвучил.
AkinaАга... всё-таки длина - абсолютный приоритет.
Ну тогда решение верное, только сортировку взять другую, по количеству элементов, типа ORDER BY COUNT(g.c_val).
Применил запрос с вашей корректировкой для таблицы из поста Cygapb-007 выше - не правильно отработал.

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
select g.rows, g.qty, group_concat(g.c_val order by g.c_val)c_vals
from(
  select v.c_val, count(distinct v.r)qty, group_concat(v.r order by v.r)rows
  from(
    select t.r, elt(c.c, t.col_1, t.col_2, t.col_3, t.col_4, t.col_5, t.col_6)c_val
    from `table` t
    join(
      select 1 c union all select 2 union all select 3 union all
      select 4 union all select 5 union all select 6
      )c
    )v
  group by v.c_val
  )g
group by g.rows, g.qty
ORDER BY COUNT(g.c_val)
limit 1
;
...
Рейтинг: 0 / 0
Помогите составить запрос по макс. кол-ву совпадений
    #39040156
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hubble.tvvПрименил запрос с вашей корректировкой для таблицы из поста Cygapb-007 выше - не правильно отработал.
То, что тебе дают ответы на твои вопросы, не означает, что нужно перестать пользоваться мозгом.
Ты в каком порядке сортируешь? Нахрена тебе группа с минимальным значением количества элементов? Где DESC?
...
Рейтинг: 0 / 0
Помогите составить запрос по макс. кол-ву совпадений
    #39040905
Cygapb-007
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
С максимальным числом повторов внутри строк оказалось сложнее.
В запросе предполагается, что числа внутри каждой строки числа отсортированы (по возрастанию, например), иначе не будет правильно работать
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
select 
    6-(c1.r is null)-(c2.r is null)-(c3.r is null)-(c4.r is null)-(c5.r is null)-(c6.r is null)retries
  , count(distinct a.r) row_qty
  , group_concat(distinct a.r order by a.r)rows
  , concat_ws(',', c1.col_1, c2.col_2, c3.col_3, c4.col_4, c5.col_5, c6.col_6)vals
from tab a
join tab b on b.r<>a.r and (
  b.col_1 in (a.col_1,a.col_2,a.col_3,a.col_4,a.col_5,a.col_6) or
  b.col_2 in (a.col_1,a.col_2,a.col_3,a.col_4,a.col_5,a.col_6) or
  b.col_3 in (a.col_1,a.col_2,a.col_3,a.col_4,a.col_5,a.col_6) or
  b.col_4 in (a.col_1,a.col_2,a.col_3,a.col_4,a.col_5,a.col_6) or
  b.col_5 in (a.col_1,a.col_2,a.col_3,a.col_4,a.col_5,a.col_6) or
  b.col_6 in (a.col_1,a.col_2,a.col_3,a.col_4,a.col_5,a.col_6))
left join tab c1 on c1.r=b.r and c1.col_1 in (a.col_1,a.col_2,a.col_3,a.col_4,a.col_5,a.col_6)
left join tab c2 on c2.r=b.r and c2.col_2 in (a.col_1,a.col_2,a.col_3,a.col_4,a.col_5,a.col_6)
left join tab c3 on c3.r=b.r and c3.col_3 in (a.col_1,a.col_2,a.col_3,a.col_4,a.col_5,a.col_6)
left join tab c4 on c4.r=b.r and c4.col_4 in (a.col_1,a.col_2,a.col_3,a.col_4,a.col_5,a.col_6)
left join tab c5 on c5.r=b.r and c5.col_5 in (a.col_1,a.col_2,a.col_3,a.col_4,a.col_5,a.col_6)
left join tab c6 on c6.r=b.r and c6.col_6 in (a.col_1,a.col_2,a.col_3,a.col_4,a.col_5,a.col_6)
group by retries, vals
having retries>1
order by retries desc, row_qty desc;

Фрагмент результата на тестовых данных:retries row_qty rows vals5 3 11,12,13 10,20,30,40,504 2 1,4 1,3,4,64 2 14,15 4,5,6,123 4 1,4,5,6 3,4,63 4 1,14,15,16 4,5,63 3 5,14,15 4,6,12

В MySQL нет конструкции TOP(1) WITH TIES , поэтому как отобрать несколько строк с одинаковым количеством максимальных совпадений, я не задумывался
...
Рейтинг: 0 / 0
Помогите составить запрос по макс. кол-ву совпадений
    #39041069
Cygapb-007
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну, то есть не так, проще, конечно же...
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
select 
  concat_ws(',', 
    @c1:=if(b.col_1 in (a.col_1,a.col_2,a.col_3,a.col_4,a.col_5,a.col_6),b.col_1,null),
    @c2:=if(b.col_2 in (a.col_1,a.col_2,a.col_3,a.col_4,a.col_5,a.col_6),b.col_2,null),
    @c3:=if(b.col_3 in (a.col_1,a.col_2,a.col_3,a.col_4,a.col_5,a.col_6),b.col_3,null),
    @c4:=if(b.col_4 in (a.col_1,a.col_2,a.col_3,a.col_4,a.col_5,a.col_6),b.col_4,null),
    @c5:=if(b.col_5 in (a.col_1,a.col_2,a.col_3,a.col_4,a.col_5,a.col_6),b.col_5,null),
    @c6:=if(b.col_6 in (a.col_1,a.col_2,a.col_3,a.col_4,a.col_5,a.col_6),b.col_6,null))vals
  , 6-(@c1 is null)-(@c2 is null)-(@c3 is null)-(@c4 is null)-(@c5 is null)-(@c6 is null) retries
  , count(distinct a.r) row_qty
  , group_concat(distinct a.r order by a.r)rows
from tab a
join tab b on b.r<>a.r and (
  b.col_1 in (a.col_1,a.col_2,a.col_3,a.col_4,a.col_5,a.col_6) or
  b.col_2 in (a.col_1,a.col_2,a.col_3,a.col_4,a.col_5,a.col_6) or
  b.col_3 in (a.col_1,a.col_2,a.col_3,a.col_4,a.col_5,a.col_6) or
  b.col_4 in (a.col_1,a.col_2,a.col_3,a.col_4,a.col_5,a.col_6) or
  b.col_5 in (a.col_1,a.col_2,a.col_3,a.col_4,a.col_5,a.col_6) or
  b.col_6 in (a.col_1,a.col_2,a.col_3,a.col_4,a.col_5,a.col_6))
group by retries, vals
having retries>1
order by retries desc, row_qty desc;
...
Рейтинг: 0 / 0
11 сообщений из 61, страница 3 из 3
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Помогите составить запрос по макс. кол-ву совпадений
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]