他のテーブルのカウントを表す列を追加したい。
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