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

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

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

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

Q&A

解決済

1回答

301閲覧

COUNT()が機能しない

janetto

総合スコア7

PostgreSQL

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

0グッド

0クリップ

投稿2022/05/23 06:29

データ内容A

|区番|区名|
|1|北|
|2|南|
|3|西|
|4|東|
|5|中|
|6|外|
|7|郊外|
|8|区外|

データ内容B

|店番|店名|区番|
|1|north|1
|2|south|2
|3|west|3
|4|in|1
|5|out|6

出したい内容

|区名|店舗数
|北|2
|南|1
|西|1
|東|?
|中|?
|外|1
|郊外|?
|区外|?

現状

|区名|店舗数
|北|0
|南|0
|西|0
|東|0
|中|0
|外|0
|郊外|0
|区外|0

現在のsql

SELECT データ内容A.区名,(select COUNT(店名)) FROM データ内容Aleft join データ内容B on データ内容A.区番 = データ内容B.区番GROUP BY データ内容A.区名

やってみたこと

sqlの中身をorderbyにしてみたり rightにしてみたり

sqlのカウントが機能しない
グループごとにカウント数を表示したい

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

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

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

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

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

退会済みユーザー

退会済みユーザー

2022/05/23 08:05

SQLだけの話じゃなく、SQLを実行している高級言語などから呼んでいるのであれば、それらの情報も質問文中に添えてください。
janetto

2022/05/23 08:09

sqlだけの話になります
guest

回答1

0

ベストアンサー

テーブル:データ内容B 単独に対する GROUP BY 区番 で 区番, COUNT(店名) を求めたものに
テーブル:データ内容A をJOINする、という形で求まるかと。

sql

1SELECT A.区名, COALESCE(X., 0) AS "店舗数" 2FROM 3 データ内容A AS A 4LEFT JOIN ( 5 SELECT 6 区番, COUNT(店名) AS7 FROM 8 データ内容B 9 GROUP BY 10 区番 11) AS X ON A.区番 = X.区番 12ORDER BY A.区番 13;

投稿2022/05/23 06:33

編集2022/05/23 06:39
退会済みユーザー

退会済みユーザー

総合スコア0

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

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

janetto

2022/05/23 06:57

ありがとうございます 追加で質問です COALESCEにハイフンや?のような文字を入れてもエラーになるのですがこれはどのようにしたらかいしょうされますでしょうか?
退会済みユーザー

退会済みユーザー

2022/05/23 07:27

クエリーの結果を受けてサーバー側で処理する中で、数値型データを期待しているところで 「ハイフンや?のような文字」をSQLから詰めて返してしまうと、それはエラーになってしまうかもしれませんね。
janetto

2022/05/23 07:43

SELECT A.区名, COALESCE(X.数, - ) AS "店舗数" このような感じてsqlを書いたら、 ")"またはその近辺で構文エラー LINE 1: SELECT A.区名, COALESCE(X.数, ? ) AS "店舗数" で出てしまいました case when X.数 is null then '-' end AS "店舗数"で記載したら 本来数字が入ってきてほしい箇所が空欄であとはハイフンになってしまっている状態です
退会済みユーザー

退会済みユーザー

2022/05/23 07:47

SELECT A.区名, COALESCE(X.数, '-' ) AS "店舗数" になるかと。文字列はシングルクォーテーションで括らないと。 case when X.数 is null then '-' else X.数 end AS "店舗数" とelse句が足りていなかったのではないかと。
janetto

2022/05/23 07:53

提案いただいた内容で記入してみたところ以下のエラーが返されてしまいました 型integerの入力構文が無効です: "-"
退会済みユーザー

退会済みユーザー

2022/05/23 08:04

もしかして、このクエリーをFROM句に入れたものを作ってますよね? その場合には、文字列に置き換えてしまうのは最後の最後の、最も外側のSELECT文上で行うのが良いかと。
janetto

2022/05/23 08:12

SELECT A.区名, case when X.数 is null then '-' else X.数 end AS "店舗数" FROM データ内容A AS A のように書いたのでfrom区には入ってないと考えてますが間違いでしょうか?
退会済みユーザー

退会済みユーザー

2022/05/23 08:15

確認するべきことを言い換えます、 「型integerの入力構文が無効です」のエラーを出力しているのは、誰ですか? psqlコマンド上やpgAdminのクエリツールではなく、 なにか高級言語などから呼び出していませんか?
退会済みユーザー

退会済みユーザー

2022/05/23 08:17

クエリーの結果を利用して、出力のために何らかの加工をするようなところで実行しているならば、 integer型を期待しているところに文字列が返ってきたら、そりゃエラーになります。 諦めて0を詰めるなどしたらいいと思いますが。
退会済みユーザー

退会済みユーザー

2022/05/23 08:31

COALESCE関数の説明に、 > 引数はすべて共通の型に変換できる必要があり、それが結果の型になります。 とあるので、文字列を含めるのはできないものと思われます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問