プロが教える店舗&オフィスのセキュリティ対策術

サブクエリの条件で取得したデータの総数と、更にのその中でフラグ(カラム)が1のデータ数を同時に知りたいです。

SELECT count(flag) as flagNum FROM info WHERE flag = 1 AND id = (サブクエリ);
これだと条件一致データ数はわかりますが、フラグがいくつであろうと関係ない総数がわかりません。

また別個にcount(*)する手もありますが、単純なデータの総数でなくサブクエリが絡んできますので、同じようなクエリを2回やるのは可能なら避けたいです。

SQL_CALC_FOUND_ROWSとFOUND_ROWS()を使ったパターンも試してみたのですが、うまくいく手を見つけられませんでした。

何かいい方法がないものでしょうか。

A 回答 (2件)

SELECT count(*)as AllNum,


sum(case flag when 1 then 1 else 0 end) as flagNum
FROM info WHERE id = (サブクエリ);
です。
    • good
    • 0
この回答へのお礼

ありがとうございます。
助かりました!

お礼日時:2012/04/05 16:35

sumでやる方が常套のような気がしますcountでやる場合は、


条件外にNULLを返してやればよいです

SELECT count(flag) flagAll
,count(if( flag = 1 AND id = (サブクエリ),1,NULL)) as flagNum
FROM info

sum(if(条件,1,0))なら条件に合致すると1なのでそれをsumすれば合致したの総和になります
count(if(条件,1,NULL))ならcountはNULLをカウントしないので、条件外を除いた数を
カウントします。条件に合致した場合の1はあまり意味はありません
    • good
    • 0
この回答へのお礼

ありがとうございます。
勉強になりました!

お礼日時:2012/04/05 16:35

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