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

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]