powered by simpleCommunicator - 2.0.53     © 2025 Programmizd 02
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Сложный запрос на выборку пар значений из одной и той же таблицы.
6 сообщений из 6, страница 1 из 1
Сложный запрос на выборку пар значений из одной и той же таблицы.
    #39426600
indahouse-alx
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
id user_id item_id
1 1 1
2 1 2
3 1 3
4 2 2
5 2 3
6 2 4
7 3 3
8 3 4
9 4 2
10 4 3

Имеется таблица orders, где user_id – id пользователя, item_id – id заказанного товара. Необходимо получить выборку пар товаров, которые заказывали разные пользователи, а именно такой результат:

Item1 Item2
2 3
3 4
...
Рейтинг: 0 / 0
Сложный запрос на выборку пар значений из одной и той же таблицы.
    #39426694
ora601
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
indahouse-alx,


Можно решить через INNER JOIN + unpivot, при этом учитывая что данных может быть ну очень много ограничить их.


Код: plsql
1.
2.
3.
4.
5.
SELECT  ui.user_id,ui.item_id , ui2.user_id user_id2 , ui2.item_id item_id2 
FROM user_items ui JOIN
user_items ui2 ON ui.user_id<>ui2.user_id AND ui.item_id<>ui2.item_id

LIMIT :N 
...
Рейтинг: 0 / 0
Сложный запрос на выборку пар значений из одной и той же таблицы.
    #39426783
indahouse-alx
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ora601,


Пользователь 1 и 2 купили одну одинаковую пару товаров.
Эта пара состоит из товара 2 и 3.

Пользователь 2 и 3 купили одну одинаковую пару товаров.
Эта пара состоит из товара 3 и 4.

Пользователь 3 и 4 НЕ купили ни одной одинаковой пары товаров.

Ну и так далее...
В конце нужно показать все уникальные пары и то из чего они состоят

Чую что тут явно нужно построить декартово множество (и возможно не один раз)
Например:
SELECT a.item_id, b.item_id
FROM Orders a, Orders b
WHERE a.user_id != b.user_id AND a.item_id = b.item_id

А вот дальше что делать ... Не пойму.
...
Рейтинг: 0 / 0
Сложный запрос на выборку пар значений из одной и той же таблицы.
    #39426786
ora601
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
indahouse-alxА вот дальше что делать ... Не пойму.

При том что ты не знаешь что конкретно должно быть на выходе - что дальше делать это большой вопрос, да :P
...
Рейтинг: 0 / 0
Сложный запрос на выборку пар значений из одной и той же таблицы.
    #39426791
qwwq
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
indahouse-alx,

Код: sql
1.
2.
3.
4.
5.
6.
SELECT
 a.user_id AS user_id1
 ,b.user_id AS user_id2
 ,a.item_id AS item_id 
FROM Orders a, Orders b
WHERE a.user_id > b.user_id AND a.item_id = b.item_id

т.к. нет надобности учитывать пару дважды

далее, отвлекаясь от пж-ных особостей пока запишем через СТЕ

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
WITH uu AS (SELECT
 a.user_id AS user_id1
 ,b.user_id AS user_id2
 ,a.item_id AS item_id -- он одинаковый

 FROM Orders a, Orders b
 WHERE a.user_id > b.user_id
  AND a.item_id = b.item_id
)
SELECT user_id1
 , user_id2
 ,a.item_id AS item_id1
 ,b.item_id AS item_id2 
FROM uu AS a 
INNER JOIN uu AS b
USING (user_id1, user_id2)
WHERE a.item_id>b.item_id
-- учитываем пары однажды, а не дважды, оговорив что больший ид всегда первый


ну и т.п.

-- на деле надо вместо сте каждый раз расписывать подзапрос.
потом можно освободиться от юзеров и сделать группировку по товарам с подсчетом каунтов.
...
Рейтинг: 0 / 0
Сложный запрос на выборку пар значений из одной и той же таблицы.
    #39427666
indahouse-alx
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
qwwq,

Спасибо ОГРОМНОЕ !
...
Рейтинг: 0 / 0
6 сообщений из 6, страница 1 из 1
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Сложный запрос на выборку пар значений из одной и той же таблицы.
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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