sql >> データベース >  >> RDS >> Mysql

複数のテーブルからのMYSQL左結合COUNTS

    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 Fiddle

    または、サブクエリで集計を実行することもできます。これは、テーブルに大量のデータがある場合に、より効率的になる可能性があります。

    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 Fiddle




    1. PHPを使用してデータの配列をmysqlに挿入する方法

    2. MySQLINクエリで順序を維持する

    3. MySQLに小数を格納する方法は?

    4. SQL Server 2008のページング方法?