[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 メーリングリストの案内