dポイントプレゼントキャンペーン実施中!

こんにちは。

[TBL] キーは A B DD Cです。

A B DD C E
1 2 21 7 .....
1 2 21 8 .....
1 2 22 3 .....
1 2 22 8 .....
1 2 22 9 .....
3 1 2 1 .....
3 3 4 2 .....

から、A=1 B=2の数の最大レコード数をカウントしたいです。
但し、DDは同じ数なことが条件です。
上でいうと、D=22のものが3つあり、D=21のものが2つあるので、最大は3ということで、3を取得したいです。

select count(*) FROM TBL where A=1 AND B=2 GROUP BY C
に近い感じだとはおもうのですが。
よろしくお願い致します。

A 回答 (2件)

サブクエリのところだけ単独で実行してみましたか?


SELECT 1 AS KEY,COUNT(*) AS CNT FROM TBL
WHERE A=1 AND B=2 GROUP BY DD
KEY  CNT
-----------
 1   2 ← DD=21のレコード数
 1   3 ← DD=22のレコード数

こうなるはずです。ここからKEYをグループ化項目に
指定し、MAX(CNT)を得るとどうなりますか?
3ですね。つまり、グループ化項目を同じにするため、
定数1を出力し、KEYというフィールド名を与えて
いるのです。

応用なので、HPをいくら検索しても出てこないでしょうし、
こんなことが書いてある本も世の中に無いと思いますよ。
サブクエリという技法をご存知でしたか?知っていたなら、
その部分を抜き出して実行してみる事です。今回、初めて
というなら、データを加工する順に入れ子にするという技
ですので、是非覚えてください。
    • good
    • 0
この回答へのお礼

バタバタしてて、回答が遅くなってしまいすみません。
サブクエリ勉強になりました!ありがとうございます。

最後にもしよかったらでよいのですが、さらに応用もできたら嬉しいのですが、

上記で、DD=22で、3というマックスレコード値を取得できたのですが、
これを、WHERE A=1 AND B=2というくくりに加え、
DDを昇順に並び替えたもので、上位から4レコードずつに対して、それぞれ同じくMAXレコードを取得できるものでしょうか?

ここまでくるとなかなか作成が難しいです。

A B DD C E
1 2 1 7 .....
1 2 2 1 .....
1 2 3 3 .....
1 2 21 7 .....
1 2 21 8 .....
1 2 22 3 .....
1 2 22 8 .....
1 2 22 9 .....

上記でいうと、最初に 2という値を取得でき、次に3という値を取得するかたちです。

難しければ、別途に致します。
色々とありがとうございました。

お礼日時:2010/03/15 18:28

先にSQLを考えるのは止めましょう。


理論の組み立てが大事です。
先ず、A=1 B=2 は抽出条件です。
次に、DD毎にレコード数をを求め、これの最大を
求めたいということですね。
英語なんで、求めたい方から記述します。日本語と
反対なところがシャクですが・・・
SELECT MAX(A.CNT) AS 取得したい値
FROM (SELECT 1 AS KEY,COUNT(*) AS CNT
  FROM TBL WHERE A=1 AND B=2 GROUP BY DD) AS A
GROUP BY A.KEY
    • good
    • 0
この回答へのお礼

ありがとうございます。無事出来ました!

ただ、SQLがまだ理解できていません。
SELECT 1 AS KEY,COUNT(*) AS CNT FROM TBL WHERE A=1 AND B=2 GROUP BY DD ⇒(1)
ここまで、最大のカウントしたい条件をだして、
(1)をグループ化し、それの最大のレコード数をゲットする感じでしょうか。

定数の使い方がよくわかっていないようです。(SELECT 1)
調べましたが、わかりやすいページがみつかりませんでした。

お礼日時:2010/03/11 20:24

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!