質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
COUNT

COUNT は、広く使用されているSQLの関数です。COUNT関数は、行数、もしくは配列のエンティティの数をカウントします。

PostgreSQL

PostgreSQLはオープンソースのオブジェクトリレーショナルデータベース管理システムです。 Oracle Databaseで使われるPL/SQLを参考に実装されたビルトイン言語で、Windows、 Mac、Linux、UNIX、MSなどいくつものプラットフォームに対応しています。

Q&A

解決済

3回答

20224閲覧

【postgres】nullを伴うcount()の計算

naoyan

総合スコア604

COUNT

COUNT は、広く使用されているSQLの関数です。COUNT関数は、行数、もしくは配列のエンティティの数をカウントします。

PostgreSQL

PostgreSQLはオープンソースのオブジェクトリレーショナルデータベース管理システムです。 Oracle Databaseで使われるPL/SQLを参考に実装されたビルトイン言語で、Windows、 Mac、Linux、UNIX、MSなどいくつものプラットフォームに対応しています。

1グッド

0クリップ

投稿2015/02/19 15:45

postgreを使っていて、今つまずいているのですが、
countを用いるときに、group by してnullを数えると0になります。

nullを0に置換するなどの方法が思いつくのですが
具体的な処理方法がわかりません。

どの用にすればいいのでしょうか。

lang

1select 2 count(xxx), 3 xxx 4 5from 6 table 7 8where 9 date >= 'yyyy-mm--dd' 10 11 group by xxx 12

よろしくお願い致します。

dthani👍を押しています

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答3

0

ベストアンサー

countの中に指定するものをnull以外の定数にすればカウントできます。
何にすれば良いのかは決め手に欠けますが、0とか1とか' 'のようにnull以外のものを指定します。

lang

1select 2 count(0), 3 xxx 4--(以下略)

投稿2015/02/19 16:11

argius

総合スコア9388

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

naoyan

2015/02/20 01:27

回答ありがとうございます!! 求めていたことができました! 純粋にこの書き方すごいです! なぜcount(0)でできるのか全く理解できないのですが 0を指定するとどういった意味を持つのでしょうか。
argius

2015/02/20 01:51

count()はnull以外のレコードの件数をカウントするものなので、それ以外の値なら何でも良いことになります。 説明にも書いていますとおり、0でなくても良くて、1でも良いのですが、そうすると1を足すことと紛らわしいかなと。だからと言って0でも違和感があり、決め手に欠けるんですよね... 考え方としては、select 0 as col1 from table を実行して得られる、全てのレコードのcol1に「nullでない」値(この場合は0)がセットされた中間の検索結果を作って、次にcol1を集計する、という流れをイメージしていただくとわかりやすいかもしれません。それをカウントすれば、nullを気にすることなくレコードの件数をカウントすることができます。 今回の場合は中間状態は省いて、別名をつける必要もないので、回答のようになります。
guest

0

こうかな?

lang

1select 2 count(coalesce(xxx,0)), 3 xxx 4 5from 6 table 7 8where 9 date >= 'yyyy-mm--dd' 10 11 group by xxx

(実行プランはどぅなんだろな。。。)

投稿2015/02/19 17:09

tomomo

総合スコア430

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

naoyan

2015/02/20 01:24

回答ありがとうございます!! いただいたSQLでは、ちょっと動作しませんでした。 もしかすると、xxxがの要素がnullを含めて複数あり、group byして集計する場合には count(coalesce(xxx,0))の記述ができないと想定しているのですが 認識あってますでしょうか?
guest

0

やったことないし強引ですが、
NULLも1としてカウントするようにすればいけるかも??

lang

1SUM(CASE WHEN xxx IS NULL THEN 1 ELSE 1 END)

投稿2015/02/19 16:03

編集2015/02/19 16:11
kinme

総合スコア843

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

kinme

2015/02/19 16:22

あれ この書き方だともうCASEいらないですよね SUM(1)
naoyan

2015/02/20 01:21

ありがとうございます! 以下のソースで解決しました! select count(CASE WHEN xxx IS NULL THEN 1 ELSE 1 END), xxx from table where date >= 'yyyy-mm--dd' group by xxx
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問