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

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

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

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

Q&A

解決済

1回答

2311閲覧

複数テーブルの重複無視カウント結果を結合

tututu_0507

総合スコア8

PostgreSQL

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

0グッド

0クリップ

投稿2021/05/10 05:58

編集2021/05/10 08:54

前提・実現したいこと

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

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

住所2テーブル
名前   id   住所
きたの 6666   東京
きたの 7777   東京
きたの 8888   東京
おおた 9999   東京
おだ   10000    大阪

★理想SELECT結果
東京のレコードは合計8つあるが、
名前カラムが佐藤は2つきたのが3つあるため住所東京は3つカウントせず5になる
住所  カウント
東京  5
埼玉  1
大阪  1

試したこと

単体のテーブルであれば以下SQLでできました。

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

これを二つ合わしましたが結果が理想と違いました。

SELECT 住所,count(DISTINCT 名前) AS カウント FROM 住所1テーブル group by 住所 union all SELECT 住所,count(DISTINCT 名前) AS カウント FROM 住所2テーブル group by 住所

★現状
住所  カウント
東京  3
埼玉  1
東京  2
大阪  1

両方を結合させつつ都合よく足し算したいです

調べてみたのですが下記では

SELECT SUM(カウント)FROM( SELECT 住所,count(DISTINCT 名前) AS カウント FROM 住所1テーブル group by 住所 union all SELECT 住所,count(DISTINCT 名前) AS カウント FROM 住所2テーブル group by 住所 )


|sum|
|7|

これではカウントの合計である"7"しか出ませんでした。

複雑で申し訳ないのですが、自分のアイデアでは実現できませんでした...
ご教示お願いいたします。

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

PostgreSQL使用

テーブル定義はどちらも以下です
テーブル名:住所テーブル 住所2テーブル
カラム
名前 VARCHAR(10)
id  VARCHAR(10)
住所 VARCHAR(10)

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

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

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

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

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

sazi

2021/05/10 06:45

> 単体のテーブルであれば以下SQLでできました。 > SELECT 住所,count(DISTINCT 住所) AS カウント FROM 住所1テーブル group by 住所 意図する結果にはならないと思いますけど。 求めたいのは同じ住所の人の数ではないのですか?
tututu_0507

2021/05/10 08:55

失礼しました。質問内容全体的に修正しました。 count(DISTINCT 住所) ↓ count(DISTINCT 名前)
guest

回答1

0

ベストアンサー

住所毎の名前の数という事なら。

SQL

1select 住所, count(disitinct 名前) as カウント 2from ( 3 SELECT * FROM 住所1テーブル 4 union all 5 SELECT * FROM 住所2テーブル 6) t 7group by 住所

それぞれのテーブルで、住所毎の名前の数を求め、それを合算したいのなら。

SQL

1select 住所, sum(カウント) as カウント 2from ( 3 SELECT 住所, count(disitinct 名前) as カウント FROM 住所1テーブル group by 住所 4 union all 5 SELECT 住所, count(disitinct 名前) as カウント FROM 住所2テーブル group by 住所 6) t 7group by 住所

投稿2021/05/10 06:49

編集2021/05/10 06:53
sazi

総合スコア25327

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

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

tututu_0507

2021/05/10 07:15

ありがとうございます。 応用できそうな回答までいただき助かりました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問