[英]Select with Multiple Counts on Left Join on Same Table
我不確定是否可以做到這一點,我有一個用戶表,並在外鍵上加入了相關的用戶活動表。 活動具有不同的類型,例如評論等。我需要按每種不同類型的活動的數量來過濾用戶。
我到目前為止所擁有的是:
SELECT
users.*,
COUNT(t1.id) AS comments,
COUNT(t2.id) AS likes
FROM users
LEFT JOIN activity AS t1 ON users.id = t1.user_id
LEFT JOIN activity AS t2 ON users.id = t2.user_id
WHERE t1.activity_type_id = 1 AND t2.activity_type_id = 2
GROUP BY users.id
HAVING comments >= 5 AND likes >= 5
這似乎很接近,但它返回的用戶有5個點贊和評論,而實際上該用戶有5個點贊和1條評論。
明確地說,我希望此查詢返回具有5個或更多點贊的用戶以及具有 5個或更多評論的用戶。
更新:
我創建了一個SQL Fiddle。 在這種情況下,我有3個用戶:
我希望查詢僅返回用戶1和3,以及他們各自的喜歡和評論總數。
您可以使用條件求和來進行計數,並且由於MySQL處理布爾表達式的方式,像sum(case when et.name = 'comment' then 1 else 0 end)
的表達式sum(case when et.name = 'comment' then 1 else 0 end)
(“常規” SQL語法)可以簡化為sum(case when et.name = 'comment')
。
SELECT
u.id,
sum(et.name = 'comment') AS comments,
sum(et.name = 'like') AS likes
FROM users AS u
LEFT JOIN engagements AS e ON u.id = e.user_id
JOIN engagement_types AS et ON e.engagement_type_id = et.id
GROUP BY u.id
HAVING sum(et.name = 'comment') >= 5
OR sum(et.name = 'like') >= 5
結果:
| ID | COMMENTS | LIKES |
|----|----------|-------|
| 1 | 6 | 8 |
| 3 | 5 | 2 |
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.