powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Помогите составить запрос по макс. кол-ву совпадений
25 сообщений из 61, страница 1 из 3
Помогите составить запрос по макс. кол-ву совпадений
    #39039102
hubble.tvv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Есть следующая таблица (первая колонка - ряд по порядку, оствльные - данные):
r c1 c2 c3 c4 c5 c6
1 1 2 3 4 5 6
2 7 8 9 10 11 12
3 2 5 8 10 16 17
4 1 3 4 6 14 16
5 3 4 6 10 12 18
6 3 4 6 15 20 21
Необходимо составить запрос, который отберет максимальное количество совпадающих чисел из каждого ряда
(возможно, не правильно сформулировал).
Например,
числа 3, 4 и 6 совпали 4 раза - в первом, в четвертом, пятом и шестом рядах.
В результате запроса чтобы были 4 (4 раза) и числа 3, 4, 6 (потому что они совпали максимальное кол-во раз).
Возможно ли такую задачу решить средствами sql?
Заранее благодарен.
...
Рейтинг: 0 / 0
Помогите составить запрос по макс. кол-ву совпадений
    #39039113
bochkov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hubble.tvvЕсть следующая таблица (первая колонка - ряд по порядку, оствльные - данные):
r c1 c2 c3 c4 c5 c6
1 1 2 3 4 5 6
2 7 8 9 10 11 12
3 2 5 8 10 16 17
4 1 3 4 6 14 16
5 3 4 6 10 12 18
6 3 4 6 15 20 21
Необходимо составить запрос, который отберет максимальное количество совпадающих чисел из каждого ряда
(возможно, не правильно сформулировал).
Например,
числа 3, 4 и 6 совпали 4 раза - в первом, в четвертом, пятом и шестом рядах.
В результате запроса чтобы были 4 (4 раза) и числа 3, 4, 6 (потому что они совпали максимальное кол-во раз).
Возможно ли такую задачу решить средствами sql?
Заранее благодарен.
я в 1 ряду 3 совпадения нашел,в 4 -5совпадений,
больше не считал
алгоритм еще хитрей?
...
Рейтинг: 0 / 0
Помогите составить запрос по макс. кол-ву совпадений
    #39039115
hubble.tvv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Я понял. Перефразирую.
Необходимо составить запрос, который отберет максимальное количество КОМБИНАЦИЙ совпадающих чисел из каждого ряда.
Т.е., числа 3, 4 и 6 ОДНОВРЕМЕННО НАХОДЯТСЯ В ОДНОМ РЯДУ и совпадают 4 раза - в первом, в четвертом, пятом и шестом рядах.
Еще усложнил.
...
Рейтинг: 0 / 0
Помогите составить запрос по макс. кол-ву совпадений
    #39039117
bochkov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ага с отбором понятно, что на выходе должно быть?
...
Рейтинг: 0 / 0
Помогите составить запрос по макс. кол-ву совпадений
    #39039121
hubble.tvv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Если возможно, то в результате запроса чтобы фигурировало число 4 (по кол-ву ОДНОВРЕМЕННЫХ совпадений - в данном случае 4 раза) и ОБЯЗАТЕЛЬНО числа 3, 4, 6 (т.е. ТЕ ЧИСЛА, которые совпали максимальное кол-во раз).
...
Рейтинг: 0 / 0
Помогите составить запрос по макс. кол-ву совпадений
    #39039135
bochkov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
структуру данных надо менять,
так точно не получится, (у меня),
еще вопрос изначально цифры 3, 4 и 6 не известны и надо их найти?
тогда получается на входе имеется только таблица?
...
Рейтинг: 0 / 0
Помогите составить запрос по макс. кол-ву совпадений
    #39039141
hubble.tvv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Да, на входе имеется только таблица.
Числа все известны.
...
Рейтинг: 0 / 0
Помогите составить запрос по макс. кол-ву совпадений
    #39039143
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hubble.tvv,
что значит числа все известны?
...
Рейтинг: 0 / 0
Помогите составить запрос по макс. кол-ву совпадений
    #39039145
bochkov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
а откуда известно что группа состоит из 3 чисел
...
Рейтинг: 0 / 0
Помогите составить запрос по макс. кол-ву совпадений
    #39039150
hubble.tvv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
вадя,
Ну как, есть таблица. Все данные в них известны. Может я вопрос не понял?

bochkov,
В том-то и дело, что необходимо составить запрос, который отберет максимальное количество КОМБИНАЦИЙ совпадающих чисел из каждого ряда.
Но если будет возможность еще и выбирать кол-во чисел в группе (ну, т.е., а не посмотреть ли, сколько раз группа из чисел 1 и 2 повторяется в каждой строке; или же из чисел 1, 2, 3, 4, 5) - это будет просто супер!!!
...
Рейтинг: 0 / 0
Помогите составить запрос по макс. кол-ву совпадений
    #39039151
hubble.tvv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
вадя,
Пардон. Если числа, которые будут искаться, то да - они не известны.
...
Рейтинг: 0 / 0
Помогите составить запрос по макс. кол-ву совпадений
    #39039154
bochkov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hubble.tvvвадя,
Ну как, есть таблица. Все данные в них известны. Может я вопрос не понял?

bochkov,
В том-то и дело, что необходимо составить запрос, который отберет максимальное количество КОМБИНАЦИЙ совпадающих чисел из каждого ряда.
Но если будет возможность еще и выбирать кол-во чисел в группе (ну, т.е., а не посмотреть ли, сколько раз группа из чисел 1 и 2 повторяется в каждой строке; или же из чисел 1, 2, 3, 4, 5) - это будет просто супер!!!
если к примеру количество чисел в группе от 1 до 5
то если в таблице числа от 0 до 99
то это будет примерно 100^5 вариантов
это если решать задачу в лоб,
да и главный вопрос, можно ли поменять структуру таблицы?

если вы расскажете суть вопроса то возможно
найдется оптимальное решение
...
Рейтинг: 0 / 0
Помогите составить запрос по макс. кол-ву совпадений
    #39039159
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
решить одним запросом - мало вероятно
использовать возможности хранимки - тогда наверно, но это будет более похоже на обыкновенное программирование
...
Рейтинг: 0 / 0
Помогите составить запрос по макс. кол-ву совпадений
    #39039168
hubble.tvv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
вадя,
Решать одним запросом не обязательно.
А насчет программирования, то я и спросил вначале, возможно ли решить этот вопрос средствами sql?

bochkov,
Структуру таблицы менять можно (я имею в виду, что можно, и, наверное даже нужно, создать другую таблицу, не уничтожая исходную).
Я просто в SQL почти "ноль".
...
Рейтинг: 0 / 0
Помогите составить запрос по макс. кол-ву совпадений
    #39039178
bochkov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
и так если структура таблицы будет
r - номер строки
c - номер колонки
v - значение ячейки
Код: sql
1.
2.
3.
4.
5.
6.
7.
CREATE TABLE `tbl` (
  `r` int(11) NOT NULL,
  `c` int(11) NOT NULL,
  `v` int(11) NOT NULL DEFAULT '0',
  PRIMARY KEY (`r`,`c`),
  KEY `idx_tbl_v` (`v`)
)



тогда получить группы чисел и количество их совпадений
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
SELECT (SELECT COUNT(DISTINCT tt1.r) 
FROM tbl tt1
JOIN tbl tt2 ON tt1.r=tt2.r AND tt1.c<tt2.c
JOIN tbl tt3 ON tt2.r=tt3.r AND tt2.c<tt3.c
WHERE tt1.v=n1 AND tt2.v=n2 AND tt3.v=n3) cnt,
n1,n2,n3
 FROM
(SELECT DISTINCT tbl.v as n1 FROM  tbl) t1,
(SELECT DISTINCT tbl.v as n2 FROM  tbl) t2,
(SELECT DISTINCT tbl.v as n3 FROM  tbl) t3
WHERE n1<>n2 AND n2<>n3 AND n1<>n3
HAVING cnt>0
ORDER BY cnt DESC


еще добавил ограничение
в группе чисел не может быть одинаковых значений
порядок чисел обязателен
но эти ограничения можно убрать
ну и запрос выводит группы по 3 числа
...
Рейтинг: 0 / 0
Помогите составить запрос по макс. кол-ву совпадений
    #39039185
bochkov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
маленько принцип запроса изменил и 5 цифирные группы вычислил
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
SELECT COUNT(DISTINCT tt1.r) cnt,
n1,n2,n3,n4,n5
 FROM  (SELECT DISTINCT tbl.v as n1 FROM  tbl) t1 
JOIN (SELECT DISTINCT tbl.v as n2 FROM  tbl) t2 ON 1
JOIN (SELECT DISTINCT tbl.v as n3 FROM  tbl) t3 ON 1
JOIN (SELECT DISTINCT tbl.v as n4 FROM  tbl) t4 ON 1
JOIN (SELECT DISTINCT tbl.v as n5 FROM  tbl) t5 ON 1
JOIN tbl tt1 ON tt1.v=n1
JOIN tbl tt2 ON tt2.v=n2 AND tt1.r=tt2.r AND tt1.c<tt2.c
JOIN tbl tt3 ON tt3.v=n3 AND tt2.r=tt3.r AND tt2.c<tt3.c
JOIN tbl tt4 ON tt4.v=n4 AND tt3.r=tt4.r AND tt3.c<tt4.c
JOIN tbl tt5 ON tt5.v=n5 AND tt4.r=tt5.r AND tt4.c<tt5.c 

WHERE n1 NOT IN(n2,n3,n4,n5) AND n2 NOT IN(n3,n4,n5) AND n3 NOT IN(n4,n5) AND n4 NOT IN(n5) 
GROUP BY n1,n2,n3,n4,n5
ORDER BY cnt DESC
...
Рейтинг: 0 / 0
Помогите составить запрос по макс. кол-ву совпадений
    #39039189
hubble.tvv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
bochkov,
Прошу прощения. Мне далеко не все понятно (выше писал - я начинающий).
Итак, по порядку:
1. Структура моей таблицы:
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
CREATE TABLE `table` (
	`r` INT(2) NOT NULL,
	`col_1` INT(2) NOT NULL,
	`col_2` INT(2) NOT NULL,
	`col_3` INT(2) NOT NULL,
	`col_4` INT(2) NOT NULL,
	`col_5` INT(2) NOT NULL,
	`col_6` INT(2) NOT NULL,
	PRIMARY KEY (`r`)
)
COLLATE='utf8_general_ci'
ENGINE=InnoDB
;



2. Данные файла-csv (из моего первого поста):
r,col_1,col_2,col_3,col_4,col_5,col_6,
1,1,2,3,4,5,6,
2,7,8,9,10,11,12,
3,2,5,8,10,16,17,
4,1,3,4,6,14,16,
5,3,4,6,10,12,18,
6,3,4,6,15,20,21

Можно переписать применительно к этой таблице.
Прошу прощения за нубство.
...
Рейтинг: 0 / 0
Помогите составить запрос по макс. кол-ву совпадений
    #39039190
hubble.tvv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Добавил csv-файл в пристежке.
...
Рейтинг: 0 / 0
Помогите составить запрос по макс. кол-ву совпадений
    #39039196
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hubble.tvvДобавил csv-файл в пристежке.
это не csv файл...
...
Рейтинг: 0 / 0
Помогите составить запрос по макс. кол-ву совпадений
    #39039197
bochkov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
применительно к вашей таблице ничего сделать нельзя
а вот в такой
Код: sql
1.
2.
3.
4.
5.
6.
7.
CREATE TABLE `tbl` (
  `r` int(11) NOT NULL,
  `c` int(11) NOT NULL,
  `v` int(11) NOT NULL DEFAULT '0',
  PRIMARY KEY (`r`,`c`),
  KEY `idx_tbl_v` (`v`)
) 


ваши данные перенес
Код: sql
1.
2.
3.
4.
5.
INSERT INTO `tbl` VALUES (1,1,1),(4,1,1),(1,2,2),(3,1,2),(1,3,3),(4,2,3),
(5,1,3),(6,1,3),(1,4,4),(4,3,4),(5,2,4),(6,2,4),(1,5,5),(3,2,5),(1,6,6),(4,4,6),
(5,3,6),(6,3,6),(2,1,7),(2,2,8),(3,3,8),(2,3,9),(2,4,10),
(3,4,10),(5,4,10),(2,5,11),(2,6,12),(5,5,12),(4,5,14),(6,4,15),(3,5,16),(4,6,16),
(3,6,17),(5,6,18),(6,5,20),(6,6,21);


вуаля
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
SELECT COUNT(DISTINCT tt1.r) cnt,
n1,n2,n3
 FROM  (SELECT DISTINCT tbl.v as n1 FROM  tbl) t1 
JOIN (SELECT DISTINCT tbl.v as n2 FROM  tbl) t2 ON 1
JOIN (SELECT DISTINCT tbl.v as n3 FROM  tbl) t3 ON 1
JOIN tbl tt1 ON tt1.v=n1
JOIN tbl tt2 ON tt2.v=n2 AND tt1.r=tt2.r AND tt1.c<tt2.c
JOIN tbl tt3 ON tt3.v=n3 AND tt2.r=tt3.r AND tt2.c<tt3.c
WHERE n1 NOT IN(n2,n3) AND n2 NOT IN(n3)
GROUP BY n1,n2,n3
ORDER BY cnt DESC
...
Рейтинг: 0 / 0
Помогите составить запрос по макс. кол-ву совпадений
    #39039198
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
bochkov
ты поставил всё не так....
это уже совсем другие условия, и соответственно решение не подходит для ТС
...
Рейтинг: 0 / 0
Помогите составить запрос по макс. кол-ву совпадений
    #39039200
bochkov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вадя,
не знаю,
только изменив структуру таблицы
можно на что то рассчитывать
лепить таблички в екселе,
а обрабатывать на sql - неправильно
поэтому и спросил можно ли менять структуру
еслиб автор сказал нельзя
я б даже не пытался
...
Рейтинг: 0 / 0
Помогите составить запрос по макс. кол-ву совпадений
    #39039201
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вадяhubble.tvvДобавил csv-файл в пристежке.
это не csv файл...
правильный файл, извиняюсь ....
...
Рейтинг: 0 / 0
Помогите составить запрос по макс. кол-ву совпадений
    #39039202
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
bochkovвадя,
не знаю,
только изменив структуру таблицы
можно на что то рассчитывать
лепить таблички в екселе,
а обрабатывать на sql - неправильно
поэтому и спросил можно ли менять структуру
еслиб автор сказал нельзя
я б даже не пытался
вопрос о количестве строк в таблице тс - если не ограничено, то твой метод не катит
если это "матрица" 6*6 то к можно преобразовать таблицу тс к твоей....
...
Рейтинг: 0 / 0
Помогите составить запрос по макс. кол-ву совпадений
    #39039204
bochkov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
моя структура позволяет хранить матрицу любой ширины
в отличие от оригинала
и позволяет сгенерировать все возможные группы одним запросом
...
Рейтинг: 0 / 0
25 сообщений из 61, страница 1 из 3
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Помогите составить запрос по макс. кол-ву совпадений
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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