mysql:13478
From: SAKAI Kei <SAKAI Kei <sak2@xxxxxxxxxx>>
Date: Sun, 12 Nov 2006 12:23:36 +0900
Subject: [mysql 13478] Re: レコード件数0をカウントしたい
坂井です > SELECT syain.no, syain.name, COUNT(data.no) > FROM syain LEFT JOIN data ON syain.no = data.no > GROUP BY data.no > ORDER BY syain.no > GROUP BY data.no ここが > GROUP BY syain.no ですかね。 存在しない(可能性がある)側のテーブルの no でグルーピング しちゃっているので、「番号がないどうし」がひとつとして 扱われています。 「必ず存在する側」(syain) の no ごとにまとめるのが吉です。 以上 On Sun, 12 Nov 2006 11:55:51 +0900 "F.Yamazaki" <fumihiko@xxxxxxxxxx> wrote: > こんにちは。先日、下記の件でアドバイス頂き運用していたのですが、 > Table:dataのカウント0が2件存在した場合、1件のみの出力となってしまう > 現象が発生しました。 > LEFT JOINに関して特に問題ないように思うのですが、仕方ないのでしょうか。 > 解決法、アドバイスいただければ幸いです。 > > SELECT syain.no, syain.name, COUNT(data.no) > FROM syain LEFT JOIN data ON syain.no = data.no > GROUP BY data.no > ORDER BY syain.no > > の出力は、 > > +---+------+--------------------+ > |no | name | COUNT( data . no ) | > +---+------+--------------------+ > | 1 | 山田 | 2 | > | 2 | 佐藤 | 0 | > | 3 | 山本 | 3 | > | 4 | 吉田 | 1 | > | 6 | 田中 | 2 | > +---+------+--------------------+ > > となり、期待する出力、 > > +---+------+--------------------+ > |no | name | COUNT( data . no ) | > +---+------+--------------------+ > | 1 | 山田 | 2 | > | 2 | 佐藤 | 0 | > | 3 | 山本 | 3 | > | 4 | 吉田 | 1 | > | 5 | 中村 | 0 |←この行がない > | 6 | 田中 | 2 | > +---+------+--------------------+ > > となりません。 > > > *使用したテストのテーブルはこちらです > > -- phpMyAdmin SQL Dump > -- version 2.6.4-pl4 > -- http://www.phpmyadmin.net > -- > -- ホスト: localhost > -- 作成の時間: 2006 年 11 月 12 日 11:30 > -- サーバーのバージョン: 4.0.26 > -- PHP バージョン: 4.3.9 > -- > -- データベース: `yamazaki_test` > -- > > -- -------------------------------------------------------- > > -- > -- テーブルの構造 `data` > -- > > CREATE TABLE `data` ( > `no` tinyint(4) NOT NULL default '0', > `etc` varchar(10) NOT NULL default '' > ) TYPE=MyISAM; > > -- > -- テーブルのダンプデータ `data` > -- > > INSERT INTO `data` VALUES (1, 'AAAA'); > INSERT INTO `data` VALUES (3, 'BBBB'); > INSERT INTO `data` VALUES (1, 'CCCC'); > INSERT INTO `data` VALUES (4, 'DDDD'); > INSERT INTO `data` VALUES (3, 'EEEE'); > INSERT INTO `data` VALUES (6, 'FFFF'); > INSERT INTO `data` VALUES (6, 'GGGG'); > INSERT INTO `data` VALUES (3, 'HHHH'); > > -- -------------------------------------------------------- > > -- > -- テーブルの構造 `syain` > -- > > CREATE TABLE `syain` ( > `no` int(4) NOT NULL default '0', > `name` varchar(10) NOT NULL default '' > ) TYPE=MyISAM; > > -- > -- テーブルのダンプデータ `syain` > -- > > INSERT INTO `syain` VALUES (1, '山田'); > INSERT INTO `syain` VALUES (2, '佐藤'); > INSERT INTO `syain` VALUES (3, '山本'); > INSERT INTO `syain` VALUES (4, '吉田'); > INSERT INTO `syain` VALUES (5, '中村'); > INSERT INTO `syain` VALUES (6, '田中'); > > > > > > "Hiroshi Kabayama" <kaba@xxxxxxxxxx>さん: > > こんにちははじめまして。樺山と申します。 > > > > 実際にサンプルで記載されているテーブルを作成し > > 下記SQL文を実行したところ予想通りの結果が取れました。 > > > > SELECT syain.no, syain.name, COUNT(data.no) > > FROM syain LEFT JOIN data ON syain.no = data.no > > GROUP BY data.no > > > > LEFT JOINすることにより、syainテーブルが主となる為 > > 0件でも出力されるようになります。 > > > > > > ----- Original Message ----- > > From: "F.Yamazaki" <fumihiko@xxxxxxxxxx> > > To: <ml@xxxxxxxxxx> > > Sent: Thursday, October 26, 2006 4:17 PM > > Subject: [mysql 13429] レコード件数0をカウントしたい > > > > > > > はじめまして。 > > > まだ始めたばかりで、いろいろ試してみたのですが解決できませんでした。 > > > 皆さんの知識をお借りできればと思います。 > > > MySQL 4.0.26の環境でやっています。 > > > > > > Table:syain Table:data > > > +----+------+ +----+------+ > > > | no | name | | no | etc | > > > +----+------+ +----+------+ > > > | 1 | 山田 | | 1 | AAAA | > > > | 2 | 佐藤 | | 3 | BBBB | > > > | 3 | 山本 | | 1 | CCCC | > > > | 4 | 吉田 | | 4 | DDDD | > > > +----+------+ | 3 | EEEE | > > > +----+------+ > > > > > > この2つのテーブルから、syainに登録されている各人についてdataから件数(レコード数)を > > > カウントしたいのです。 > > > > > > SELECT `syain`.`no`,`syain`.`name`,COUNT(`data`.`no`) FROM `syain`,`data` > > > WHERE `syain`.`no` = `data`.`no` ROUP BY `data`.`no` > > > > > > ここまではたどり着いたのですが、結果は > > > > > > +----+------+---------------------+ > > > | no | name | COUNT(`data`.`no`) | > > > +----+------+---------------------+ > > > | 1 | 山田 | 2 | > > > | 3 | 山本 | 2 | > > > | 4 | 吉田 | 1 | > > > +----+------+---------------------+ > > > > > > で、カウント0の佐藤さんはリストされません。 > > > > > > +----+------+---------------------+ > > > | no | name | COUNT(`data`.`no`) | > > > +----+------+---------------------+ > > > | 1 | 山田 | 2 | > > > | 2 | 佐藤 | 0 | > > > | 3 | 山本 | 2 | > > > | 4 | 吉田 | 1 | > > > +----+------+---------------------+ > > > > > > のように、0でもリストさせたいのですが、良い方法はありますでしょうか。 > > > よろしくお願いします。 > > > > > > ------------------ > > > From:山崎文彦 > > ------------------ > From:山崎文彦 >
13429 2006-10-26 16:17 ["F.Yamazaki" <fumihi] レコード件数0をカウントしたい 13430 2006-10-26 16:34 ┗["Hiroshi Kabayama" <] 13431 2006-10-26 16:52 ┣["F.Yamazaki" <fumihi] 13477 2006-11-12 11:55 ┗["F.Yamazaki" <fumihi] -> 13478 2006-11-12 12:23 ┗[SAKAI Kei <sak2@xxxx] 13479 2006-11-12 13:23 ┗["F.Yamazaki" <fumihi]