From: | Alexander Farber <alexander(dot)farber(at)gmail(dot)com> |
---|---|
To: | |
Cc: | pgsql-general <pgsql-general(at)postgresql(dot)org> |
Subject: | Re: Adding AVG to a JOIN |
Date: | 2018-04-23 10:56:32 |
Message-ID: | CAADeyWinpG6vWYYARBtONNL=VHBTVn-ocKcdZDDMvxywFVtoXQ@mail.gmail.com |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Thread: | |
Lists: | pgsql-general |
Thank you, Daniel -
On Mon, Apr 23, 2018 at 12:15 PM, Daniel Verite <daniel(at)manitou-mail(dot)org>
wrote:
>
> You may use a correlated subquery in the SELECT clause,
> like this:
>
> SELECT
> u.elo,
> u.uid,
> (SELECT AVG(score) FROM words_moves WHERE uid=u.uid),
> s.given,
> s.photo
>
this has worked great for me:
SELECT
u.elo,
(SELECT ROUND(AVG(score), 1) FROM words_moves WHERE
uid = u.uid) AS score,
s.given,
s.photo
FROM words_users u
JOIN words_social s USING (uid)
WHERE u.elo > 1500
-- take the most recent record from words_social
AND NOT EXISTS (SELECT 1
FROM words_social x
WHERE s.uid = x.uid
AND x.stamp > s.stamp)
-- only show players who where active in the last week
AND EXISTS (SELECT 1
FROM words_moves
WHERE played > CURRENT_TIMESTAMP - INTERVAL '1
week'
AND action IN ('play', 'skip', 'swap',
'resign'))
ORDER BY u.elo DESC
LIMIT 10
Is that what is called LATERAL JOIN?
Regards
Alex
From | Date | Subject | |
---|---|---|---|
Next Message | Igor Neyman | 2018-04-23 14:29:58 | RE: Strange error in Windows 10 Pro |
Previous Message | Daniel Verite | 2018-04-23 10:15:14 | Re: Adding AVG to a JOIN |