powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Помогите составить запрос по макс. кол-ву совпадений
25 сообщений из 61, страница 2 из 3
Помогите составить запрос по макс. кол-ву совпадений
    #39039206
hubble.tvv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
bochkov,
Спасибо. Но скорее всего средствами SQL не получится. Я понял, что вы имели в виду, когда написали поменять структуру таблицы. На самом деле оригинальная таблица большая. Это для примера я привел 6х6.
Еще раз спасибо.
Извиняюсь за ваше потраченное время.
...
Рейтинг: 0 / 0
Помогите составить запрос по макс. кол-ву совпадений
    #39039207
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
bochkovмоя структура позволяет хранить матрицу любой ширины
в отличие от оригинала
и позволяет сгенерировать все возможные группы одним запросом
видимо поздно уже :) - туплю.
...
Рейтинг: 0 / 0
Помогите составить запрос по макс. кол-ву совпадений
    #39039208
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
насколько большая?
и практическое назначение таблицы и результатов (если не секрет)?
...
Рейтинг: 0 / 0
Помогите составить запрос по макс. кол-ву совпадений
    #39039209
bochkov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hubble.tvvbochkov,
Спасибо. Но скорее всего средствами SQL не получится. Я понял, что вы имели в виду, когда написали поменять структуру таблицы. На самом деле оригинальная таблица большая. Это для примера я привел 6х6.
Еще раз спасибо.
Извиняюсь за ваше потраченное время.
трансформация данных перед обработкой-обычное дело
любую матрицу можно запихать и этим запросом обработать
...
Рейтинг: 0 / 0
Помогите составить запрос по макс. кол-ву совпадений
    #39039210
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
bochkovhubble.tvvbochkov,
Спасибо. Но скорее всего средствами SQL не получится. Я понял, что вы имели в виду, когда написали поменять структуру таблицы. На самом деле оригинальная таблица большая. Это для примера я привел 6х6.
Еще раз спасибо.
Извиняюсь за ваше потраченное время.
трансформация данных перед обработкой-обычное дело
любую матрицу можно запихать и этим запросом обработать
да, только тут вопрос упирается во время обработки..
...
Рейтинг: 0 / 0
Помогите составить запрос по макс. кол-ву совпадений
    #39039211
bochkov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вадя,
все лучше чем в рукопашку
...
Рейтинг: 0 / 0
Помогите составить запрос по макс. кол-ву совпадений
    #39039213
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
да , причем может оказаться, что решение на sql будет самым быстрым
...
Рейтинг: 0 / 0
Помогите составить запрос по макс. кол-ву совпадений
    #39039216
hubble.tvv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
вадя,
Нет, не секрет. Применение - лото.
Таблица в общем, как я уже понимаю, по меркам для обработки на sql - не большая. 6х1000

bochkov,
Остается у вас выпросить, как делается трансформация?
...
Рейтинг: 0 / 0
Помогите составить запрос по макс. кол-ву совпадений
    #39039217
hubble.tvv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
bochkov,
Я имею в виду, что вы не ручным способом набивали матрицу?
...
Рейтинг: 0 / 0
Помогите составить запрос по макс. кол-ву совпадений
    #39039218
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
не вникал, просто нашёл
получение всех перестановок (если количество значений чисел из колонок с1-6 реальное)
http://forum.sources.ru/index.php?showtopic=304456
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
    IF OBJECT_ID('AddResult') IS NOT NULL
      DROP PROCEDURE AddResult
    GO
     
    --запись результата в таблицу ResValues
    CREATE PROCEDURE AddResult
      @k int
    AS
      BEGIN
        DECLARE @i int
        DECLARE @tmpstr varchar(255)
        SET @i = 1
        SET @tmpstr = ''
            
        WHILE @i <= @k
        BEGIN
          SET @tmpstr = @tmpstr + (SELECT CAST (Value as varchar(255)) FROM TmpValues WHERE id = @i)
          SET @i = @i + 1
        END
        
        INSERT INTO ResValues VALUES (@tmpstr)
      END
    GO
     
    IF OBJECT_ID('Generate') IS NOT NULL
      DROP PROCEDURE Generate
    GO
     
    --геренация перестановок
    CREATE PROCEDURE Generate
      @n int,
      @k int
    AS
      BEGIN
     
        IF OBJECT_ID('TmpValues') IS NOT NULL
          DROP TABLE TmpValues
        --создание таблицы для хранения временных значений
        CREATE TABLE TmpValues (
          id int IDENTITY(1,1),
          Value int,
          CONSTRAINT PK_TmpValuesId PRIMARY KEY (id)
        )
     
        IF OBJECT_ID('ResValues') IS NOT NULL
          DROP TABLE ResValues
        --создание таблицы для хранения результата
        CREATE TABLE ResValues (
          id int IDENTITY(1,1),
          Result varchar(255),
          CONSTRAINT PK_ResValuesId PRIMARY KEY (id)
        )
     
        DECLARE @i int
        SET @i = 1
        --генерация первой последовательности (перестановки)
        WHILE @i <= @k
        BEGIN
          INSERT INTO TmpValues VALUES (@i)
          SET @i = @i+1
        END
        
        WHILE @i<>0
        BEGIN
          --запись результата в таблицу ResValue
          EXEC AddResult @k      
          
          SET @i = @k
          WHILE (SELECT Value FROM TmpValues WHERE id = @i) = @n - @k + @i
          BEGIN
            SET @i = @i-1
          END
          
          UPDATE TmpValues SET Value = (SELECT Value FROM TmpValues WHERE id = @i) + 1 WHERE id = @i
          
          DECLARE @j int
          DECLARE @tmp int
          SET @j = @i + 1
          
          WHILE @j <= @k
          BEGIN
            SET @tmp = (SELECT Value FROM TmpValues WHERE id = (@j-1)) + 1
            UPDATE TmpValues SET Value = @tmp WHERE id = @j
            SET @j = @j+1
          END
        END
      END



ну и далее....
...
Рейтинг: 0 / 0
Помогите составить запрос по макс. кол-ву совпадений
    #39039219
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
количество значений чисел из колонок с1-6 ограниченно и чему оно равно?
...
Рейтинг: 0 / 0
Помогите составить запрос по макс. кол-ву совпадений
    #39039220
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
тогда наверно проще изменить ТЗ и записывать данные сразу в в формате таблицы bochkov
...
Рейтинг: 0 / 0
Помогите составить запрос по макс. кол-ву совпадений
    #39039221
hubble.tvv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
вадя,
Да, забыл. От 1 до 50.
...
Рейтинг: 0 / 0
Помогите составить запрос по макс. кол-ву совпадений
    #39039222
hubble.tvv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
вадя,
Если бы с нуля заполнял, то согласен, но данные УЖЕ ЕСТЬ в формате, как я показал.
...
Рейтинг: 0 / 0
Помогите составить запрос по макс. кол-ву совпадений
    #39039242
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 g.qty desc
limit 1
;

rowsqtyc_vals1,4,5,643,4,6
...
Рейтинг: 0 / 0
Помогите составить запрос по макс. кол-ву совпадений
    #39039244
Cygapb-007
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Поправка: group_concat(distinct v.r order by v.r)rows
...
Рейтинг: 0 / 0
Помогите составить запрос по макс. кол-ву совпадений
    #39039581
hubble.tvv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Cygapb-007,
Большое спасибо.
Теперь буду изучать ваш код (и не только) и учиться составлять запросы.
...
Рейтинг: 0 / 0
Помогите составить запрос по макс. кол-ву совпадений
    #39039589
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Всё-таки я не понял постановки задачи. Наверное, потому, что пример данных не очень удачен.

Скажем, изменим немножко входной массив, так, что имеется та же тройка значений (3,4 и 6), присутствующая в 4 записях, но в то же время имеется двойка значений (3 и 4), присутствующая в 5 записях... что будет целевым решением задачи?
rc1c2c3c4c5c611234562349101112325810161741346141653461012186346152021
...
Рейтинг: 0 / 0
Помогите составить запрос по макс. кол-ву совпадений
    #39039655
hubble.tvv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Akina,
3, 4, и 6
...
Рейтинг: 0 / 0
Помогите составить запрос по макс. кол-ву совпадений
    #39039658
hubble.tvv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Akina ,
Подставьте в запросе вместо limit 1, limit 10 и вы увидете свою пару 5 раз.
...
Рейтинг: 0 / 0
Помогите составить запрос по макс. кол-ву совпадений
    #39039659
hubble.tvv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Akina,
Извиняюсь. Я ошибся.
...
Рейтинг: 0 / 0
Помогите составить запрос по макс. кол-ву совпадений
    #39039663
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hubble.tvvAkina,
3, 4, и 6
Если в дополнение к означенным найдётся вариант из 4 значений в 3 записях - он будет ещё более предпочтительным? а если 5 значений в 2 записях - то это самый предпочтительный?

Т.е. абсолютный приоритет - максимальная длина группы, а уже среди всех групп макс. длины - макс. количество записей в группе. Так?
...
Рейтинг: 0 / 0
Помогите составить запрос по макс. кол-ву совпадений
    #39039668
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
При такой постановке задачи решение формируется в два этапа. На первом этапе выполняется поиск максимально длинных групп. А на втором уже выбирается максимальная по количеству записей группа.

hubble.tvvя и спросил вначале, возможно ли решить этот вопрос средствами sql?Да, возможно. Но целесообразность такого решения весьма сомнительна.

hubble.tvvТаблица в общем, как я уже понимаю, по меркам для обработки на sql - не большая. 6х1000
hubble.tvvОт 1 до 50.
Итого 1000 записей, в каждой 6 значений в пределах от 1 до 50... ну чё, чисто из любопытства можно повозиться.
...
Рейтинг: 0 / 0
Помогите составить запрос по макс. кол-ву совпадений
    #39039694
Фотография ПЕНСИОНЕРКА
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hubble.tvv,

достаточно часто применяю прием(access)-- сцепляю поля через разделитель(дополнительные разделители в начале и конце), искомые значения тоже окружаю разделителем)

удобно ---поля могут быть символьного и/или числового типа, допускается like по начальной или хвостовой части

Код: sql
1.
2.
3.
4.
5.
SELECT W1.r,
 "`" & W1.[c1] & "`" & W1.[c2] & "`" & W1.[c3] & "`" & W1.[c4] & "`" & W1.[c5] & "`" & W1.[c6] & "`" AS p1,
(InStr(p1,"`3`")>0)+(InStr(p1,"`4`")>0)+(InStr(p1,"`6`")>0) AS kol
FROM W1
order by  3,1;
...
Рейтинг: 0 / 0
Помогите составить запрос по макс. кол-ву совпадений
    #39039707
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Поскольку у него 6 полей к сравнению, проще написать выражение попарного сравнения (чё там, всего 15 слагаемых), чем заниматься конкатенациями и строковыми поисками.
...
Рейтинг: 0 / 0
25 сообщений из 61, страница 2 из 3
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Помогите составить запрос по макс. кол-ву совпадений
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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