Как выполнить макс на внутреннем соединении с двумя различными значениями в столбцах? - PullRequest
0 голосов
/ 03 июля 2018

Как найти пользователя с наибольшим количеством рефералов, у которых есть хотя бы три синих ботинка, использующих PostgreSQL?

table 1 - users
name (matches shoes.owner_name)
referred_by (foreign keyed to users.name)

table 2 - shoes
owner_name (matches persons.name)
shoe_name
shoe_color

Пока у меня есть отдельные запросы, возвращающие части того, что я хочу выше:

(SELECT count(*) as shoe_count
FROM shoes
GROUP BY owner_name
WHERE shoe_color = “blue”
AND shoe_count>3) most_shoes

INNER JOIN

(SELECT count(*) as referral_count 
FROM users
GROUP BY referred_by
) most_referrals

ORDER BY referral_count DESC
LIMIT 1 

1 Ответ

0 голосов
/ 03 июля 2018

Два подзапроса кажутся подходящими. Они будут выглядеть так:

SELECT s.owner_name, s.show_count, r.referral_count
FROM (SELECT owner_name, count(*) as shoe_count
      FROM shoes
      WHERE shoe_color = 'blue'
      GROUP BY owner_name
      HAVING shoe_count >= 3
    ) s JOIN
    (SELECT referred_by, count(*) as referral_count 
     FROM users
     GROUP BY referred_by
    ) r
    ON s.owner_name = r.referred_by
ORDER BY r.referral_count DESC
LIMIT 1 ;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...