powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Подсчет и вывод повторяющихся наборов
5 сообщений из 5, страница 1 из 1
Подсчет и вывод повторяющихся наборов
    #39657946
sameuser
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Привет. Есть вопрос, который я решил упростить для размещения здесь, чтобы вникание в суть не отняло много времени.

Допустим, есть магазин, в котором всего 5 товаров: рыба, мясо, молоко, сыр и хлеб.
И таблица, в которой указывается состав заказа.

fkey_order_id (внешний ключ на таблицу с заказами, номер заказа)
fkey_item_id (внешний ключ на таблицу с продуктами)

Заполнена она примерно следующим образом (вместо id продуктов я указал их текстовое значение, чтобы было понятнее):

order_id ........ fkey_item_id
1 ..................... Мясо
1 ..................... Рыба
1 ..................... Хлеб
2 ..................... Рыба
2 ..................... Сыр
3 ..................... Хлеб
3 ..................... Рыба
3 ..................... Мясо
4 ..................... Молоко
4 ..................... Сыр
5 ..................... Рыба
5 ..................... Хлеб
5 ..................... Мясо
6 ..................... Сыр
6 ..................... Рыба
7 ..................... Мясо
7 ..................... Хлеб
... ... ... и т.д.
_________________________

Встречаются заказы с одинаковым составом. Зеленым цветом я выделил повторяющийся заказ из 3 позиций, а синим - повторяющийся из двух позиций. Оставшиеся 2 заказа, набранные черным цветом, не повторяются и нам в этой задаче не интересны.

Что нужно получить на выходе?
Список популярных заказов (точнее, их состав) и количество - сколько раз они были заказаны. В рамках нашего примера это выглядело бы так:

________________
1) Рыба, Хлеб, мясо (3 )
2) Сыр, рыба ( 2 )

Вопрос А: Подскажите, пожалуйста, формат запроса на примере этой простой таблицы?
Вопрос Б: такие запросы с точки зрения SQL тяжелы для исполнения? В сравнении с обычными выборками.. Речь не идет о десятках миллионов записей, конечно. Но тем не менее.

Спасибо!
...
Рейтинг: 0 / 0
Подсчет и вывод повторяющихся наборов
    #39657953
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
sameuser,

Заказы "Рыба, Хлеб, мясо" и "Рыба, Рыба, Хлеб, мясо" эквиваленты между собой?

С точки зрения бизнеса - странная у вас аналитика. Было бы куда интереснее считать пары (ведущий-ведомый) товаров в заказах, чтобы при заказе одного товара предлагать другой товар.
...
Рейтинг: 0 / 0
Подсчет и вывод повторяющихся наборов
    #39657968
sameuser
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Привет, спасибо за ответ!

авторЗаказы "Рыба, Хлеб, мясо" и "Рыба, Рыба, Хлеб, мясо" эквиваленты между собой?
В заказе не может быть повторяющихся товаров.
И максимальное количество товаров ограничено: не более 3 штук на заказ по этому примеру.

Сами же заказы могут быть одинаковыми по составу (разные клиенты могут заказывать одинаковые наборы продуктов), но в то же время могут различаться порядком следования элементов внутри. Я это продемонстрировал в "зеленой" и "синей" группе товаров.

авторС точки зрения бизнеса - странная у вас аналитика.
Ну, да. Я пример упростил, по факту же - заказывается скорее некоторый набор услуг.
...
Рейтинг: 0 / 0
Подсчет и вывод повторяющихся наборов
    #39657987
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: sql
1.
2.
3.
4.
5.
6.
7.
SELECT item_list, COUNT(*)
FROM
  (SELECT GROUP_CONCAT(fkey_item_id ORDER BY fkey_item_id SEPARATOR '~') item_list
  FROM mytable
  GROUP BY order_id) t
HAVING COUNT(*) > 1
ORDER BY COUNT(*) DESC

Вместо '~' можно взять любой символ или строку, которые гарантированно не встречаются в исходных данных.
...
Рейтинг: 0 / 0
Подсчет и вывод повторяющихся наборов
    #39657999
sameuser
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Спасибо, буду разбирать по кусочкам. Если не пойму - напишу.
...
Рейтинг: 0 / 0
5 сообщений из 5, страница 1 из 1
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Подсчет и вывод повторяющихся наборов
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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