我想添加代表其他表计数的列。
我有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
星星_吉文
starID Topic 1 ball 2 book 3 book 4 book
我要结束于:
Topic_Review
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