我在調試SQL查詢時遇到了一些麻煩,並且非常感謝您的幫助。Postgres LEFT JOIN和COUNT
下面是該查詢:
SELECT p.id, p.type, p.submission_id,
p.title, p.description, p.date, extract('epoch' FROM p.time) AS time,
podcasts.image_url, podcasts.title AS podcast_title,
COUNT(u1) as upvote_count, u2.id as upvote_id,
episodes.mp3_url, episodes.duration,
COUNT(c) as comment_count
FROM posts AS p LEFT JOIN upvotes AS u1 ON p.id=u1.post_id AND u1.comment_id=-1
LEFT JOIN upvotes AS u2 ON p.id=u2.post_id AND u2.user_id=$1 AND u2.comment_id=-1
LEFT JOIN episodes ON p.submission_id = episodes.id
LEFT JOIN podcasts ON episodes.podcast_id=podcasts.id
LEFT JOIN comments AS c ON c.post_id=p.id
WHERE p.type='podcast' AND p.time IS NOT NULL
GROUP BY(p.id, u2.id, podcasts.image_url, episodes.mp3_url, episodes.duration, podcasts.title);
意外的行爲來源於兩個COUNT語句。我希望upvote_count等同於
SELECT COUNT(*) FROM upvotes WHERE upvotes.post_id = (individual post id);
爲每個單獨的職位和相同的評論數(我希望返回的意見總數的每個職位。不過,我從這些查詢獲得奇怪看似隨機的結果對於這兩個領域。誰能幫我診斷問題?
不相關,但是:在group by的列中放置括號是沒用的 –