184 похожих чатов

Добрый день! Подскажите пожалуйста направление решения задачи с определением самых

товаров в корзине.
Есть таблица с продажами
Заказ/товар/количество/стоимость

Необходимо определить какие товары чаще всего продаются с определенным товаром.
Те отбираем все заказы с определенным товаром и теперь надо определить какие наборы товаров встречаются чаще всего с этим товаром, набором является минимум 2 товара в корзине максимум 5
Например: молоко, йогурт и батон встречается в 70% заказах, а молоко, йогурт, батон и банан в 10% заказах
Как это определить с помощью питона понятно, но можно ли вычислить наборы на уровне запроса к бд?

7 ответов

13 просмотров

- группировка по заказу, через groupArray делаете массив товаров - используете этот массив как ключ группировки следующего уровня, считаете count - сколько вариантов этой корзинки встретилось - дальше начинается самое интересное - разделить слишком большие корзинки на малые. тут надо развлекаться с нграммами. Можно и в КХ, только товары надо превратить в буквы :) Данных-то много? Может и правда проще на питоне?

Evgeniy-Sergeev Автор вопроса
Evgeniy Sergeev
Хочется красиво )

Плюс надо сделать не единоразовый анализ, а инструмент аналитика

Evgeniy-Sergeev Автор вопроса
Evgeniy Sergeev
Плюс надо сделать не единоразовый анализ, а инстру...

Поэтому хочется понять можно ли это сделать полностью на уровне запроса

Evgeniy Sergeev
Поэтому хочется понять можно ли это сделать полнос...

сделать можно. Сложное место - перестановки товаров в корзине . Но можно упростить - сделать предопределенные корзинки и проверить что найденная корзинка попадает/похожа на предопределенную.

create table x (order String, sku String) Engine = Memory; insert into x values ('order1', 'banana') ('order1', 'bread') insert into x values ('order2', 'banana') ('order2', 'bread') insert into x values ('order3', 'banana') insert into x values ('order4', 'banana') ('order4', 'milk') insert into x values ('order5', 'break') ('order5', 'milk') select arrayJoin([g, g]), arrayElement(g.1, 1) from (select order, sumMap([sku], [toUInt64(1)]) g from x group by order) group by sku select sku, arrayReverseSort( j -> j.2, arrayFilter( i -> i.1 <> sku, arrayZip(g__.1, g__.2))) x from ( select sku, sumMap(g_) g__ from ( select arrayJoin(g.1) sku, (flatten([g.1, g.1]), flatten([g.2, g.2]),) g_ from ( select order, sumMap([sku], [toUInt64(1)]) g from x group by order) ) group by sku) ┌─sku────┬─x──────────────────────────┐ │ milk │ [('banana',2),('break',2)] │ │ bread │ [('banana',4)] │ │ break │ [('milk',2)] │ │ banana │ [('bread',4),('milk',2)] │ └────────┴────────────────────────────┘ кол-во умножено на 2, это легко починить джойня с 0, а не 1, но мне лень

Похожие вопросы

Обсуждают сегодня

Здравствуйте, вопрос по структурам данных. Были у вас случаи, когда пришлось писать деревья или двунаправленные списки?
/ /
48
Всем привет! Скажите, никто не пытался уменьшить размер процесса ssl, которые ассоциируется с открытым соединением (не помню точное название этого процесса, но там была какая-...
Алексей
20
а проверьте, собирается ли у кого сейчас транк лазаря через делюкс? у меня вот: fpcupdeluxe: info: Lazarus Native Installer (BuildModuleCustom: UserIDE): LazBuild: building Us...
Iluha Companets
20
This is a big issue. Just by being a citizen of a country, you are denied to contribute to Open Source software: https://youtu.be/L5Ec5jrpLVk?si=1iIuHnMPbCB4anV-
Sharuzzaman Ahmat Raslan
72
Мне тут приспичило встроить в программу форматировние текста SQL, расставить переносы строк и отступы так, чтобы лучше читалось. Я что-то свое изобразил, оно после ключевых сл...
Sergey Bodrov
11
добрый день. возможно ли изменить цвет окон лазаруса? Как?
Budemposmotret
35
Господа, а кто-нибудь сталкивался с размещением на TTabControl/TTabSheet множества контролов (> 100) с последующими External: Access violation? Вот буквально на ровном месте. ...
Dmitry
29
А какие существуют способы обработки ошибок выделения памяти в ядре? Т.е., допустим, есть функция, которая возвращает адрес свободной страницы в физической памяти и диапазон в...
disba1ancer
51
Добрый день. Опять снова хочу обратиться к вам за помощью. После создания проэкта stack new, lazy.nvim + nvim-lspconfig/haskell-tools + hlint, ormolu из mason + hls из ghcup ...
Nannk
8
Does anyone have some zeroday's left?
Wito!d ♥️🩷
44
Карта сайта