実現したいこと
下記のような、同一テーブル内の結果の値が異なる行を数えたいです。
テーブルの中は、本来はもっと多くのデータがありますが必要な部分だけ抜粋してみました。
抽出し、数えたいのは下記のような形です。
商品列(syohin)
フラグ列flg(1~4)の中で0と1またはnull値が混じるデータがあるとします。
この表で、フラグの値が異なる"行"の数だけカウントしたいです。
(フラグの値が1だけでも、0だけでもない。 0と1とnullが混在する行)
■追記 nullの扱いについて。
全ての値がnullという行は存在しないと思いますが、
もし存在している場合は1でも0でもない、異なる行という扱いを取りたい。
下の表で行くと、結果はcount(syohin) 4
という結果となるのが理想です。
-----zaikoテーブル-----
syohin/flg1/flg2/flg3/flg4
aaa/1/0/1/0
bbb/1/1/1/1
ccc/1/1/0/0
dde/0/0/1/0
eee/1/1/1/1
fff/0/0/0/0
ggg/1/null/0/0
試したこと
そもそもこのやり方があっているのかどうかわかりませんが、
カウントする前に一度表に出してみることとしました。
select syohin ,flg1 ,flg2 ,flg3 ,flg4 from syohin Where flg1 +flg2 +flg3 +flg4 >= 1 and flg1 +flg2 +flg3 +flg4 < 4;
こちらを実行すると
-----zaikoテーブル-----
syohin/flg1/flg2/flg3/flg4
aaa/1/0/1/0
ccc/1/1/0/0
dde/0/0/1/0
flg1~4の値を横に足し算し、足し算の結果が1以上4未満となった
行は取り出せたように見えました。
ただ1つ問題があり、nullがあるデータが取り出せませんでした。
②対象列のカウント
上の表の条件は変えずにzaiko列を数えます。
select count(syohin) from syohin Where flg1 +flg2 +flg3 +flg4 >= 1 and flg1 +flg2 +flg3 +flg4 < 4;
結果:count(syohin)3
まとめると、
・nullがある行も対象にしたいのですが、どうしたらnullも含まれるようになるのでしょうか。
・上の書き方はかなり冗長的で改善の余地があると思いますが
他にどのような抽出方法がありますでしょうか。
ご教示の程よろしくお願い致します。
再追記)
数えたい対象が列と行反対でしたので掲載し直しました。
回答してくださった方申し訳ございません。
回答3件
あなたの回答
tips
プレビュー