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

mysql:11627

From: 梅沢 功 <梅沢 功 <umezawa@xxxxxxxxxx>>
Date: Sat, 25 Jun 2005 4:48:56 +0900
Subject: [mysql 11627] Re: 3つのテーブルのjoin

梅沢です。

すみません。何か違っているような... と思いながら安易にリプライして
しまいました。

> From: MAO <mao@xxxxxxxxxx>
> Date: 2005/06/25 Sat AM 03:30:05 JST
>  
> 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.gid
> GROUP  BY g.gid;
> 
> でやってみたところ、
> 
> +-----+---------+----------------+-------------+
> | gid | gname   | count( u.uid ) | sum(i.inum) |
> +-----+---------+----------------+-------------+
> |   1 | チームA |              6 |          48 |
> |   2 | チームB |              1 |           3 |
> +-----+---------+----------------+-------------+
> 
> となってしまいました。

count( u.uid )の方は、gid=1 に対してユーザ2人×アイテム3レコードと
いうことで 6 になってしまったのですね。
sum(i.inum)もユーザ2人×(アイテム3レコードの個数の総和)になって
しまったということです。

自宅には MySQL が入ったマシンがないので、Access で試してみました。
以下のような SQL を書けば OK なようです。すみませんが、細部は変更して
ください。MySQL では副問合せを [] で括って良かったかどうか覚えていま
せん。
# MySQL はほとんど使ったことがないもので...

SELECT g.gid, g.gname, count( u.uid ), item_count
FROM (grp AS g LEFT JOIN usr AS u ON g.gid = u.gid) 
LEFT JOIN [select i.gid, sum(i.inum) as item_count 
from item i GROUP BY i.gid]. AS x ON g.gid = x.gid
GROUP BY g.gid, g.gname, item_count;



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