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

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

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

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

SQL

SQL(Structured Query Language)は、リレーショナルデータベース管理システム (RDBMS)のデータベース言語です。大きく分けて、データ定義言語(DDL)、データ操作言語(DML)、データ制御言語(DCL)の3つで構成されており、プログラム上でSQL文を生成して、RDBMSに命令を出し、RDBに必要なデータを格納できます。また、格納したデータを引き出すことも可能です。

Q&A

解決済

4回答

33856閲覧

カウントが0件の場合、0を返したい

taro9292

総合スコア26

PostgreSQL

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

SQL

SQL(Structured Query Language)は、リレーショナルデータベース管理システム (RDBMS)のデータベース言語です。大きく分けて、データ定義言語(DDL)、データ操作言語(DML)、データ制御言語(DCL)の3つで構成されており、プログラム上でSQL文を生成して、RDBMSに命令を出し、RDBに必要なデータを格納できます。また、格納したデータを引き出すことも可能です。

0グッド

0クリップ

投稿2020/05/22 10:48

あるカラムから条件に従ってさらに絞り込んだ結果を表示したいのですが、0の場合ですと、表示されず、うえにデータが詰めてしまう状態です。
ない場合は0を入れたいのですが、どうしたらよいでしょうか?

理想
count result
9 7
2 0
1 1      
1 0
4 3
2 0

現在
count result
9 7
2 1
1 3   
1
4
2

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

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

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

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

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

etsuhisa

2020/05/22 11:00

countとresultはどのようなテーブルに対して、何のツールorプログラムを使用して、どのようなSQLで取り出した結果でしょうか?
taro9292

2020/05/22 11:03

postgres になります。 select count(*) as result from A where game <= 7 というようなものです
etsuhisa

2020/05/22 11:10

それだけだと、gameが7以下の行数が1つだけ返却されるだけです。 複数行の結果が出力される理由、countとresultの関係が読み取れないです。 可能なら、psqlの出力を貼り付けてもらえるとわかりやすいです。
退会済みユーザー

退会済みユーザー

2020/05/22 11:16

第三者が試せるよう、CREATE TABLE文やINSERT INTO文なども整備して、問題になっているクエリーも質問文中に掲載するとすぐ解決できますよ。
guest

回答4

0

SELECT COUNT(性別=男 OR NULL) AS 男の数
, COUNT(性別=女 OR NULL) AS 女の数
FROM テーブルのように OR NULLを集計関数にいれれば解決することがわかりました。

投稿2020/05/22 13:19

taro9292

総合スコア26

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

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

0

勝手にテーブルとデータをそれっぽく仮定した回答です。

SQL

1create table A (label char(1),game int); 2insert into A values('A',1); 3insert into A values('A',2); 4insert into A values('A',3); 5insert into A values('A',4); 6insert into A values('A',5); 7insert into A values('A',6); 8insert into A values('A',7); 9insert into A values('A',8); 10insert into A values('A',9); 11insert into A values('B',8); 12insert into A values('B',9); 13insert into A values('C',1); 14insert into A values('D',9); 15insert into A values('E',5); 16insert into A values('E',6); 17insert into A values('E',7); 18insert into A values('E',8); 19insert into A values('F',8); 20insert into A values('F',9);

countで書かれていた結果。

SQL

1select label,count(*) as result from A group by label; 2+-------+--------+ 3| label | result | 4+-------+--------+ 5| A | 9 | 6| B | 2 | 7| C | 1 | 8| D | 1 | 9| E | 4 | 10| F | 2 | 11+-------+--------+

resultで書かれていた結果。

SQL

1select label,count(*) as result from A where game <= 7 group by label; 2+-------+--------+ 3| label | result | 4+-------+--------+ 5| A | 7 | 6| C | 1 | 7| E | 3 | 8+-------+--------+ 9

導出表+外部結合+COALESCEで実現した場合の例。

SQL

1select label1,coalesce(result,0) as result from (select distinct label as label1 from A) t1 left join (select label as label2,count(*) as result from A where game <= 7 group by label) t2 on label1=label2; 2+--------+--------+ 3| label1 | result | 4+--------+--------+ 5| A | 7 | 6| B | 0 | 7| C | 1 | 8| D | 0 | 9| E | 3 | 10| F | 0 | 11+--------+--------+

caseで個数に置き換えてsumで計算した場合の例。

SQL

1select label,sum(case when game<= 7 then 1 else 0 end) as result from A group by label; 2 3select label,sum(num) as result from (select label,case when game<= 7 then 1 else 0 end as num from A) t group by label;

投稿2020/05/22 13:03

etsuhisa

総合スコア416

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

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

0

ベストアンサー

追記欄みてもちょっと意味不明ですが
select句にカウント用のSQLをかけば行けそうな気がします

select count,(select count(*) from xxx where xxx) from xxx
あとは相関関係次第

投稿2020/05/22 12:44

yambejp

総合スコア115870

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

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

0

LEFT OUTER JOINかなにかで連結しているのであれば、
COALESCE(カラム名, 0)
みたいなふうにすればNULLじゃなくゼロになったりしますが。

クエリーを観てないのでなんとも。

投稿2020/05/22 11:17

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.40%

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

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

質問する

関連した質問