簡體   English   中英

來自多個表的MYSQL左連接計數

[英]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

Sql小提琴

或者,您可以在子查詢中執行聚合,如果表中有大量數據,這可能會更有效:

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

Sql小提琴

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM