[前][次][番号順一覧][スレッド一覧]

mysql:11624

From: MAO <MAO <mao@xxxxxxxxxx>>
Date: Sat, 25 Jun 2005 01:22:35 +0900
Subject: [mysql 11624] 3つのテーブルのjoin

こんばんは、MAOです。

すみません。教えてください。

3つのテーブルをjoinして結果をだしたいと思っています。
環境は4.0.23a-standard です。


テーブル:grp
+-----+---------+
| gid | gname   |
+-----+---------+
|   1 | チームA |
|   2 | チームB |
+-----+---------+

テーブル:usr
+-----+-----+------------+
| uid | gid | uname      |
+-----+-----+------------+
|   1 |   1 | あいうえお |
|   2 |   1 | かきくけこ |
|   3 |   2 | さしすせそ |
+-----+-----+------------+

テーブル:item
+-----+-----+------+----------+
| iid | gid | inum | iname    |
+-----+-----+------+----------+
|   1 |   1 |    2 | エンピツ |
|   2 |   1 |   10 | 消しゴム |
|   3 |   2 |    3 | 定規     |
|   4 |   1 |   12 | 定規     |
+-----+-----+------+----------+

と、3つのテーブルがあります。
grpテーブルのチームAとチームBにそれぞれ何人いて、
いくつの数のアイテムをもっているかを計算したいと思っています。

まず、2つのテーブルをjoinしてみました。

mysql> SELECT g.gid, g.gname, count( u.uid ) 
    -> FROM grp g
    -> LEFT join usr u ON g.gid = u.gid
    -> GROUP  BY g.gid;
+-----+---------+----------------+
| gid | gname   | count( u.uid ) |
+-----+---------+----------------+
|   1 | チームA |              2 |
|   2 | チームB |              1 |
+-----+---------+----------------+

これで、チームごとのユーザ数はでました。

今度は、さらにjoinをして、チームごとのアイテム数も
出したいと思い下記のようなSQL文をかきました。


mysql> SELECT g.gid, g.gname, count( u.uid ) ,sum(i.inum)
    -> FROM (grp g
    -> LEFT join usr u ON g.gid = u.gid) left join item i on g.gid = i.iid
    -> GROUP  BY g.gid;
+-----+---------+----------------+-------------+
| gid | gname   | count( u.uid ) | sum(i.inum) |
+-----+---------+----------------+-------------+
|   1 | チームA |              2 |           4 |
|   2 | チームB |              1 |          10 |
+-----+---------+----------------+-------------+

すると、人数はあっているものの、アイテムの合計が
異なった結果になってしまいます。

これを、
+-----+---------+----------------+-------------+
| gid | gname   | count( u.uid ) | sum(i.inum) |
+-----+---------+----------------+-------------+
|   1 | チームA |              2 |          24 |
|   2 | チームB |              1 |           3 |
+-----+---------+------------------------------+

と、正しくだすには、どうすればよいでしょうか?

以上、よろしくお願いします。


[前][次][番号順一覧][スレッド一覧]

->   11624 2005-06-25 01:22 [MAO <mao@xxxxxxxxxx>] 3つのテーブルのjoin                     
     11630 2005-06-27 09:52 ┗["T.Sasaki" <papasan2]