[PHP-users 19656]Re: GROUPBY節、HAVING節 について

zai zai91210 @ sky.zero.ad.jp
2004年 1月 3日 (土) 16:32:04 JST


zaiです。毎度。

 ぢょ〜@よくきたなですさん、ありがとうございます。

>       おめでとうございます.MySQL のメーリングリストでどうぞ.

 そうですね。次回からは気をつけます。    しかし、

 申し訳ないのですが、私の参加しているMySQLのMLは、まだ皆さんお休みのよ
うです。迷惑でなければ、後少し教えていただければ助かります。

、向後さん、ありがとうございます。
> 
>  こんにちは。向後と申します。
> 
> On 2004/01/02, at 22:13, zai wrote:
> > 1.code1〜5は、VARCHAR型ですが、"c123"以上、"d998"以下と言う扱い方をし
> > たい。
> > 2.それが出来れば、"c555"や"d122"などは、1.の範囲に入るので、code1〜
> > code5の5つの項目のなかの、どの項目にあっても、カウントを1する。
> >
> >  具体的には、
> >   レコードAは、code2に"c555"、code4に"d122"、code5に"x333"、
> >   レコードBは、code1に"c222"、code3に"a111"、
> >   レコードCは、code2に"c555"、code5に"c999"
> > と、言うような場合
> >
> >   レコードAから2個、Bから1個、Cから2個の合計カウント5を求めたいの
> > です。
> 
>  そもそも、PHPのMLで group by や having の使い方を聞くのは、ちょっと違うかと思うのですが。
>  それはさておき、基本的にsqlのcountは項目を数えるのではなく、レコード数を数えるためのものでは?
>  なので、正攻法では無理だと思います。
> 
>  無理矢理sqlでやろうとすると、私は以下のsql位しかおもいつきませんでした。
>  MySQLの環境が今手元にないので、PostgreSQLで検証。

 重ね重ね、ありがとうございます。私のほう(phpMyAdmin)で、試しました結果
は、

You have an error in your SQL syntax near 'SELECT k1,k2,code1 as code FROM test1
 union all SELECT k1,k2,code2 as code FROM ' at line 1

と、言うエラーがでます。

 UNION ALLを調べまして、単純なものから初めました。次のようなもので、試
しました。

SELECT k1, k2, code1 as code FROM 
UNION ALL
SELECT k1, k2, code2 as code FROM test1
 as a
where code between 'c555' and 'd998';

しかし、まだ、理解できていないものですから

You have an error in your SQL syntax near 'UNION ALL SELECT k1, k2, code2 as code
 FROM test1 as a where code between 'c555'' at line 1

のようなエラーが出ます。
 向後さんには、PostgreSQLとMySQLの違いがありますので、無理を承知でお願
いいたします。なにか、心当たりでもありましたら、アドバイスをお願いいたし
ます。また、皆様で、大目に見ていただいて、今回だけヨと。ヒントがあれば、
よろしくお願いいたします。

>  あと、項目1、項目2の内容が不明なのでzaiさんの期待する結果なのかもいまいち怪しいです。まぁ、なにかの参考にでもなれば、ということで。
> 
> *前準備*
> create table test1 (k1 varchar(4),k2 varchar(4),code1 varchar(4),code2 
> varchar(4),code3 varchar(4),code4 varchar(4),code5 varchar(4));
> insert into test1(code2,code4,code5) values('c555','d122','x33');
> insert into test1(code1,code3) values ('c222','a111');
> insert into test1(code2,code5) values ('c555','c999');
> 
> *本文*
> select * from (
> select k1,k2,code1 as code from test1
> union all
> select k1,k2,code2 as code from test1
> union all
> select k1,k2,code3 as code from test1
> union all
> select k1,k2,code4 as code from test1
> union all
> select k1,k2,code5 as code from test1
> ) as a
> where code between 'c555' and 'd998';
> 
> *結果*
>   k1 | k2 | code
> ----+----+------
>    |       | c555
>        |       | c555
>        |       | d122
>        |       | c999
> (4 rows)
> 
> #あと、レコードBの'c222' 'a111'は共に between 'c555' and 
> 'd998'に含まれないので、合計カウントは5じゃなくて4ですよね?

 そうでした(ペコ)。


 最後に、皆様、ML違いの質問ですが、今回はご容赦ください。
> 
> _______________________________________________
> PHP-users mailing list  PHP-users @ php.gr.jp
> http://ns1.php.gr.jp/mailman/listinfo/php-users
> PHP初心者のためのページ - 質問する前にはこちらをお読みください
> http://www.php.gr.jp/php/novice.php3




PHP-users メーリングリストの案内