他の統計ソフトウェア (STATA) では、2 つの別々のテーブル間で結合を実行するときに、結合の結果を報告するオプションがあります。
たとえば、ある列でテーブルを別のテーブルと結合し、2 番目のテーブルに一意でない値がある場合、それが報告されます。
同様に、内部結合を実行すると、両方のテーブルから削除された行の数が報告され、左または右の外部結合を実行すると、一致しなかった行の数がわかります。
他の統計ソフトウェア (STATA) では、2 つの別々のテーブル間で結合を実行するときに、結合の結果を報告するオプションがあります。
たとえば、ある列でテーブルを別のテーブルと結合し、2 番目のテーブルに一意でない値がある場合、それが報告されます。
同様に、内部結合を実行すると、両方のテーブルから削除された行の数が報告され、左または右の外部結合を実行すると、一致しなかった行の数がわかります。
厄介な外部結合が必要になります。CTE バージョンは次のとおりです。
-- Some data
CREATE TABLE bob
( ID INTEGER NOT NULL
, zname varchar
);
INSERT INTO bob(id, zname) VALUES
(2, 'Alice') ,(3, 'Charly')
,(4,'David') ,(5, 'Edsger') ,(6, 'Fanny')
;
CREATE TABLE john
( ID INTEGER NOT NULL
, zname varchar
);
INSERT INTO john(id, zname) VALUES
(4,'David') ,(5, 'Edsger') ,(6, 'Fanny')
,(7,'Gerard') ,(8, 'Hendrik') ,(9, 'Irene'), (10, 'Joop')
;
--
-- Encode presence in bob as 1, presence in John AS 2, both=3
--
WITH flags AS (
WITH b AS (
SELECT 1::integer AS flag, id
FROM bob
)
, j AS (
SELECT 2::integer AS flag, id
FROM john
)
SELECT COALESCE(b.flag, 0) + COALESCE(j.flag, 0) AS flag
FROM b
FULL OUTER JOIN j ON b.id = j.id
)
SELECT flag, COUNT(*)
FROM flags
GROUP BY flag;
結果:
CREATE TABLE
INSERT 0 5
CREATE TABLE
INSERT 0 7
flag | count
------+-------
1 | 2
3 | 3
2 | 4
(3 rows)
私の知る限り、Postgres内でそれを行うオプションはありませんが、見積もりを見れば推測できます。
欠落している行を計算するには、すべての行をカウントする必要があるため、データベースは通常、そのようなことを避けようとします。
私が考えることができるオプション: