Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Помогите составить запрос по макс. кол-ву совпадений / 25 сообщений из 61, страница 1 из 3
29.08.2015, 12:26:22
    #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
29.08.2015, 12:42:20
    #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
29.08.2015, 12:53:49
    #39039115
hubble.tvv
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите составить запрос по макс. кол-ву совпадений
Я понял. Перефразирую.
Необходимо составить запрос, который отберет максимальное количество КОМБИНАЦИЙ совпадающих чисел из каждого ряда.
Т.е., числа 3, 4 и 6 ОДНОВРЕМЕННО НАХОДЯТСЯ В ОДНОМ РЯДУ и совпадают 4 раза - в первом, в четвертом, пятом и шестом рядах.
Еще усложнил.
...
Рейтинг: 0 / 0
29.08.2015, 13:02:41
    #39039117
bochkov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите составить запрос по макс. кол-ву совпадений
ага с отбором понятно, что на выходе должно быть?
...
Рейтинг: 0 / 0
29.08.2015, 13:25:53
    #39039121
hubble.tvv
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите составить запрос по макс. кол-ву совпадений
Если возможно, то в результате запроса чтобы фигурировало число 4 (по кол-ву ОДНОВРЕМЕННЫХ совпадений - в данном случае 4 раза) и ОБЯЗАТЕЛЬНО числа 3, 4, 6 (т.е. ТЕ ЧИСЛА, которые совпали максимальное кол-во раз).
...
Рейтинг: 0 / 0
29.08.2015, 14:44:04
    #39039135
bochkov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите составить запрос по макс. кол-ву совпадений
структуру данных надо менять,
так точно не получится, (у меня),
еще вопрос изначально цифры 3, 4 и 6 не известны и надо их найти?
тогда получается на входе имеется только таблица?
...
Рейтинг: 0 / 0
29.08.2015, 15:01:16
    #39039141
hubble.tvv
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите составить запрос по макс. кол-ву совпадений
Да, на входе имеется только таблица.
Числа все известны.
...
Рейтинг: 0 / 0
29.08.2015, 15:07:17
    #39039143
вадя
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите составить запрос по макс. кол-ву совпадений
hubble.tvv,
что значит числа все известны?
...
Рейтинг: 0 / 0
29.08.2015, 15:12:47
    #39039145
bochkov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите составить запрос по макс. кол-ву совпадений
а откуда известно что группа состоит из 3 чисел
...
Рейтинг: 0 / 0
29.08.2015, 15:51:36
    #39039150
hubble.tvv
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите составить запрос по макс. кол-ву совпадений
вадя,
Ну как, есть таблица. Все данные в них известны. Может я вопрос не понял?

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

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

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

bochkov,
Структуру таблицы менять можно (я имею в виду, что можно, и, наверное даже нужно, создать другую таблицу, не уничтожая исходную).
Я просто в SQL почти "ноль".
...
Рейтинг: 0 / 0
29.08.2015, 18:20:05
    #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
29.08.2015, 18:41:30
    #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
29.08.2015, 18:58:25
    #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
29.08.2015, 18:59:56
    #39039190
hubble.tvv
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите составить запрос по макс. кол-ву совпадений
Добавил csv-файл в пристежке.
...
Рейтинг: 0 / 0
29.08.2015, 19:18:42
    #39039196
вадя
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите составить запрос по макс. кол-ву совпадений
hubble.tvvДобавил csv-файл в пристежке.
это не csv файл...
...
Рейтинг: 0 / 0
29.08.2015, 19:20:41
    #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
29.08.2015, 19:22:04
    #39039198
вадя
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите составить запрос по макс. кол-ву совпадений
bochkov
ты поставил всё не так....
это уже совсем другие условия, и соответственно решение не подходит для ТС
...
Рейтинг: 0 / 0
29.08.2015, 19:28:18
    #39039200
bochkov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите составить запрос по макс. кол-ву совпадений
вадя,
не знаю,
только изменив структуру таблицы
можно на что то рассчитывать
лепить таблички в екселе,
а обрабатывать на sql - неправильно
поэтому и спросил можно ли менять структуру
еслиб автор сказал нельзя
я б даже не пытался
...
Рейтинг: 0 / 0
29.08.2015, 19:31:13
    #39039201
вадя
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите составить запрос по макс. кол-ву совпадений
вадяhubble.tvvДобавил csv-файл в пристежке.
это не csv файл...
правильный файл, извиняюсь ....
...
Рейтинг: 0 / 0
29.08.2015, 19:34:15
    #39039202
вадя
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите составить запрос по макс. кол-ву совпадений
bochkovвадя,
не знаю,
только изменив структуру таблицы
можно на что то рассчитывать
лепить таблички в екселе,
а обрабатывать на sql - неправильно
поэтому и спросил можно ли менять структуру
еслиб автор сказал нельзя
я б даже не пытался
вопрос о количестве строк в таблице тс - если не ограничено, то твой метод не катит
если это "матрица" 6*6 то к можно преобразовать таблицу тс к твоей....
...
Рейтинг: 0 / 0
29.08.2015, 19:37:17
    #39039204
bochkov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите составить запрос по макс. кол-ву совпадений
моя структура позволяет хранить матрицу любой ширины
в отличие от оригинала
и позволяет сгенерировать все возможные группы одним запросом
...
Рейтинг: 0 / 0
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Помогите составить запрос по макс. кол-ву совпадений / 25 сообщений из 61, страница 1 из 3
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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