SQL - Выбрать пары пользователей с равным количеством - PullRequest
0 голосов
/ 28 мая 2020

Я пытаюсь написать запрос, который возвращает пары пользователей, у которых одинаковое количество кредитов.

У меня есть эта таблица:

ЗАЙМЫ

id_loan  book_barcode id_user
1         123            1
2         321            2
3         456            3
4         678            4
5         721            1
6         934            2

Это мой код для получения пар пользователей:

SELECT l1.id_user user_1, l2.id_user user_2
FROM loans l1
JOIN loans l2 ON l2.id_user > l2.id_user
GROUP BY l2.id_user, l2.id_user; 

Это то, что я хочу от своего запроса, но я не знаю, как правильно сравнивать два значения , Я пробовал, но не вышло.

id_user1   id_user2  number_loan
 1            2           2
 3            4           1

1 Ответ

4 голосов
/ 28 мая 2020

Самый разумный способ - агрегировать ссуды перед присоединением:

with u as (
      select id_user, count(*) as num_loans
      from loans l
      group by id_user
     )
select u1.id_user, u2.id_user
from u u1 join
     u u2
     on u1.num_loans = u2.num_loans and u1.id_user < u2.id_user;

Вы можете сделать это без предварительного агрегирования, но запрос будет намного дороже:

select u1.id_user, u2.id_user
from loans u1 join
     loans u2
     on u1.id_user < u2.id_user
group by u1.id_user, u2.id_user
having count(distinct u1.id_loan) = count(distinct u2.id_loan);

Я не рекомендую этот подход.

...