PostgreSQLの質問です。
やりたいこと
order by
を使い、データの数値が大きい順に並び替えたいです。
NULLの値が含まれている時、NULLを0として、並び順の下の方に持って行きたいです。
やったこと 1
下記のようなSQL文を書きました。
lang
1select 2 tblA.clmnA1, 3 tblA.clmnA2, 4 case when tblB.cntclmnB1 is null then 0 else tblB.cntclmnB1 end, 5 case when tblC.cntclmnC1 is null then 0 else tblC.cntclmnC1 end 6 7from ( 8 select clmnA1, clmnA2 9 from tblA 10 where clmnA3 = X 11)tblA 12 13left join( 14 select clmnB1, count(clmnB1) as cntclmnB1 15 from tblB 16 group by clmnB1 17)tblB on tblA.clmnA1 = tblB.clmnB1 18 19left join( 20 select clmnC1, count(clmnC1) as cntclmnC1 21 from tblC 22 group by clmnC1 23)tblC on tblA.clmnA1 = tblC.clmnC1 24 25order by tblB.cntclmnB1 desc, tblC.cntclmnC1 desc
結果 1
case when
を使ってNULLの値を0に変えても、下記のように、0が並び順の先に来てしまい、求める結果が得られません。
| tblA.clmnA1 | tblA.clmnA2 | tblB.cntclmnB1 | tblC.cntclmnC1 |
| data | data | 0 | 0 |
| data | data | 9 | 0 |
| data | data | 9 | 8 |
| data | data | 9 | 6 |
| data | data | 7 | 0 |
| data | data | 7 | 4 |
やったこと 2
ググって調べた結果 order by
の後に(xxx is null),
という記述を入れるという話が出てきたので試してみました。
lang
1select 2 tblA.clmnA1, 3 tblA.clmnA2, 4 case when tblB.cntclmnB1 is null then 0 else tblB.cntclmnB1 end, 5 case when tblC.cntclmnC1 is null then 0 else tblC.cntclmnC1 end 6 7from ( 8 select clmnA1, clmnA2 9 from tblA 10 where clmnA3 = X 11)tblA 12 13left join( 14 select clmnB1, count(clmnB1) as cntclmnB1 15 from tblB 16 group by clmnB1 17)tblB on tblA.clmnA1 = tblB.clmnB1 18 19left join( 20 select clmnC1, count(clmnC1) as cntclmnC1 21 from tblC 22 group by clmnC1 23)tblC on tblA.clmnA1 = tblC.clmnC1 24 25order by 26 (tblB.cntclmnB1 is null), 27 (tblC.cntclmnC1 is null), 28 tblB.cntclmnB1 desc, 29 tblC.cntclmnC1 desc
結果2
そもそもの順番がむちゃくちゃになってしまい、求める結果が得られませんでした。
求めている結果は
このように、0が後に来るデータです。
| tblA.clmnA1 | tblA.clmnA2 | tblB.cntclmnB1 | tblC.cntclmnC1 |
| data | data | 9 | 8 |
| data | data | 9 | 6 |
| data | data | 9 | 0 |
| data | data | 7 | 4 |
| data | data | 7 | 0 |
| data | data | 0 | 0 |
記述の仕方に問題があるのでしょうか。
そもそも、case when
を使って0にすれば0として扱えるというのが勘違いでしょうか。
教えていただけると助かります。
よろしくお願いいたします。
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2015/06/24 06:00 編集