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

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

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

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

Q&A

解決済

2回答

2379閲覧

postgreSQLでカウントするレコードの条件設定したいです

tututu_0507

総合スコア8

PostgreSQL

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

0グッド

0クリップ

投稿2021/05/06 03:01

編集2021/05/06 04:38

前提・実現したいこと

以下のようなテーブルで住所が東京のレコード数住所ごとにおなじ場所のレコードをカウントした結果がほしいのですが、さらに条件として名前カラムが同じレコードは無視した数をカウントしたいです。

住所 テーブル
名前   id   住所
佐藤 1111   東京
佐藤 2222   東京
田中 3333   東京
清水 4444   東京
山田  5555   埼玉

★理想SELECT結果
名前カラムが佐藤はあるため住所東京は1つカウントしない
住所  カウント
東京  3
埼玉  1

試したこと

おなじ名前のレコードを無視しない場合以下のSELECT文をためし、結果が4になったのですが、ここから名前カラムが同じ場合無視するという条件をどうしたらよいかわかりません。
名前カラムが同じ場合を無視した場合は結果が東京:3 埼玉:1になる想定です。カウントする条件のようなものを付け方などありますでしょうか?
(自分の知っているwhere句の使い方では実現できず..)

★現状
名前カラムが同じ場合”佐藤”でもカウントしているため東京が4になってしまう

SELECT 住所,count(住所) FROM 住所テーブル

住所  カウント
東京  4
埼玉  1

★現状2
WHERE句を付け加えましたが、東京のレコードだけしかでてこないので想定と違います

SELECT 住所,count(住所) FROM 住所テーブル WHERE 住所='東京'

住所 カウント
東京 4

補足情報(FW/ツールのバージョンなど)

ここにより詳細な情報を記載してください。

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

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

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

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

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

tututu_0507

2021/05/06 04:12

m6uさんご回答ありがとうございます。 最初の質問の仕方ですとm6uさんの答えになると思いますが、ちょっと質問したいことがずれていました。 m6uさんのwhere句分ですと東京のカウント結果しか出てこないのですが、ほかにも埼玉のカウント結果も同時に出しつつ、名前カラムが同じ場合はカウントしないみたいなことをしたいというところです 質問の方修正しました、わかりずらくて申し訳ないです
tututu_0507

2021/05/06 04:33

@m.ts101806 さん テーブル定義は以下です テーブル名:住所テーブル カラム 名前 VARCHAR(10) id  VARCHAR(10) 住所 VARCHAR(10)
guest

回答2

0

ベストアンサー

sql

1SELECT 住所,COUNT(DISTINCT 名前) AS カウント 2FROM 住所テーブル

でいいんじゃない?

投稿2021/05/06 04:36

sousuke

総合スコア3830

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

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

tututu_0507

2021/05/06 04:52

ありがとうございます!!!これかもしれないです!!
sousuke

2021/05/06 05:00

個人的には「GROUP BY 住所」は入れたほうがいいと思います。
guest

0

日本語名でテーブルやカラムを定義しているからと言って、
SQL文中で全角空白を使っては、
実行できるクエリーもできなくなってしまいますよ。

さて、WHERE句を補ってはいかがでしょうか。
SELECT 住所, count(住所) FROM 住所テーブル WHERE 住所 = '東京' GROUP BY 住所
みたいな。
COUNT()やSUM()など集約関数を使うときは、必ずGROUP BY句とセットです。
詳しくは:GROUP BY句とHAVING句

投稿2021/05/06 03:59

編集2021/05/06 04:43
退会済みユーザー

退会済みユーザー

総合スコア0

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

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

tututu_0507

2021/05/06 04:52

m6uさんご回答ありがとうございます。 最初の質問の仕方ですとm6uさんの答えになると思いますが、ちょっと質問したいことがずれていました。 m6uさんのwhere句分ですと東京のカウント結果しか出てこないのですが、ほかにも埼玉のカウント結果も同時に出しつつ、名前カラムが同じ場合はカウントしないみたいなことをしたいというところです 質問の方修正しました、わかりずらくて申し訳ないです
tututu_0507

2021/05/06 04:53

group byありがとうございます。たしかにないとエラーになってしまいました。セットにして実行したいと思います!
退会済みユーザー

退会済みユーザー

2021/05/06 04:58

まぁ、東京だけに絞り込む意図でWHERE句を足しているのだから、WHERE句を省略してGROUP BYだけは残せば、よろしいかと。
tututu_0507

2021/05/06 04:59

そもそも質問ミスにも関わらず色々な事教えていただきありがとうございます!高評価いれさせていただきますmm
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.31%

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

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

質問する

関連した質問