[英]MYSQL Left Join COUNTS from multiple tables
我想添加表示來自其他表的計數的列。
我有3張桌子。
留言
MessageID User Message Topic
1 Tom Hi ball
2 John Hey book
3 Mike Sup book
4 Mike Ok book
話題
Topic Title Category1 Category2
ball Sports Action Hot
book School Study Hot
Stars_Given
starID Topic
1 ball
2 book
3 book
4 book
我想結束:
主題_評論
Topic Title StarCount UserCount MessageCount
ball Sports 1 1 1
book school 3 2 3
所以基本上我想附加 3 列,其中包含唯一值的計數(每個主題中給出的星數、主題內有消息的唯一用戶以及每個主題中的唯一消息數)。
我希望最終也能夠過濾類別(查看兩列)。
另外,我想最終按我加入的計數進行排序。 例如,我將有一個按鈕,按升序按“星數”排序,或按降序按“用戶數”排序,等等。
我試過調整其他人的答案,但無法正常工作。
select
t.Topic,
t.Title,
count(distinct s.starID) as StarCount,
count(distinct m.User) as UserCount,
count(distinct m.messageID) as MessageCount
from
Topics t
left join Messages m ON m.Topic = t.Topic
left join Stars_Given s ON s.Topic = t.Topic
group by
t.Topic,
t.Title
或者,您可以在子查詢中執行聚合,如果表中有大量數據,這可能會更有效:
select
t.Topic,
t.Title,
s.StarCount,
m.UserCount,
m.MessageCount
from
Topics t
left join (
select
Topic,
count(distinct User) as UserCount,
count(*) as MessageCount
from Messages
group by Topic
) m ON m.Topic = t.Topic
left join (
select
Topic,
count(*) as StarCount
from Stars_Given
group by Topic
) s ON s.Topic = t.Topic
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.