2

次のシナリオのクエリを作成する方法:

私は3つのテーブルを持っています:

  1. 人々
  2. ブックス ( のユーザーとリンクpeopleserno)
  3. ビデオ ( のユーザーとリンクpeopleserno)

特定の人が読んだ/見た本とビデオの数を含む1行を出力するSQLを作成したいと思います。

出力例:

John | 3 (books) | 2 (videos)

私はこのようなことを試しましたが、うまくいきません:

select a.name, 
       count(b.serno) as books, 
       count(c.serno) as videos
  from people a, 
       books b, 
       videos c
 where a.serno = b.peopleserno
   and a.serno = c.peopleserno

ありがとうございました。

4

5 に答える 5

4

left join何も読んだり見たりしていないユーザーも取得する必要があり、group by特定のユーザー数を取得するにはユーザーが必要です

select a.name, 
       count(distinct b.title) as books, 
       count(distinct c.title) as videos 
from people a
left join books b on a.serno = b.peopleserno
left join videos c on a.serno = c.peopleserno
group by a.name

SQLFiddle デモ

于 2013-09-23T09:40:52.600 に答える
1
select a.name, 
       ( select count(b.serno) from books b where a.serno = b.peopleserno ) as books, 
       ( select  count(c.serno) from videos c where a.serno = c.peopleserno) as videos 
from people a
于 2013-09-23T09:41:20.330 に答える
0

カウントするために集計する必要があるフィールドで GROUP BY 句を使用する必要があります。

于 2013-09-23T09:41:08.497 に答える