Hallo,
Ich habe hier ein ganz seltsames verhalten. Ziel war, herauszufinden, viele Personen sowohl in der Tabelle s als auch m, nur in der Tabelle s und nur in der Tabelle m zu bestimmen. Meine Idee: erstelle Outer join und Zähle Werte.
OUTER JOIN:
s enthält id (PK) und mort_id (FK)
m enthält rec_num (PK)
mort_id = rec_num
Nun möchte ich bilanzieren:
+---------+-------------+----------------------+-------------+----------------------+---------+---------+---------+--------+
| n | COUNT(s_id) | COUNT(DISTINCT s_id) | COUNT(m_id) | COUNT(DISTINCT m_id) | s1m1 | s1m0 | s0m1 | s0m0 |
+---------+-------------+----------------------+-------------+----------------------+---------+---------+---------+--------+
| 9819354 | 8527786 | 0 | 2405789 | 2405789 | 1114221 | 7413565 | 1291568 | 0 |
+---------+-------------+----------------------+-------------+----------------------+---------+---------+---------+--------+
Alles geht schön auf:
n = s1m1 + s0m1 + s1m0
COUNT(s_id) entspricht Anzahl rows von s
COUNT(m_id) = COUNT(DISTINCT m_id) = s1m1 +s0m1 = Anzahl rows von m
etc.
Seltsam ist, dass COUNT(DISTINCT s_id) 0 ergibt !!
Wie ist das möglich?
Besten Dank für Hinweise.
Gruss
giordano
Ich habe hier ein ganz seltsames verhalten. Ziel war, herauszufinden, viele Personen sowohl in der Tabelle s als auch m, nur in der Tabelle s und nur in der Tabelle m zu bestimmen. Meine Idee: erstelle Outer join und Zähle Werte.
OUTER JOIN:
s enthält id (PK) und mort_id (FK)
m enthält rec_num (PK)
mort_id = rec_num
Code:
CREATE TABLE test SELECT s.id AS s_id, s.mort_id AS m_id FROM s LEFT OUTER JOIN m ON s.mort_id = m.rec_num UNION SELECT s.id AS s_id, m.rec_num AS m_id FROM s RIGHT OUTER JOIN m ON s.mort_id = m.rec_num ;
Code:
SELECT COUNT(*) n, COUNT(s_id), COUNT(DISTINCT s_id), COUNT(m_id), COUNT(DISTINCT m_id) , SUM(CASE WHEN s_id IS NOT NULL AND m_id IS NOT NULL THEN 1 ELSE 0 END) s1m1 , SUM(CASE WHEN s_id IS NOT NULL AND m_id IS NULL THEN 1 ELSE 0 END) s1m0 , SUM(CASE WHEN s_id IS NULL AND m_id IS NOT NULL THEN 1 ELSE 0 END) s0m1 , SUM(CASE WHEN s_id IS NULL AND m_id IS NULL THEN 1 ELSE 0 END) s0m0 FROM test ;
+---------+-------------+----------------------+-------------+----------------------+---------+---------+---------+--------+
| n | COUNT(s_id) | COUNT(DISTINCT s_id) | COUNT(m_id) | COUNT(DISTINCT m_id) | s1m1 | s1m0 | s0m1 | s0m0 |
+---------+-------------+----------------------+-------------+----------------------+---------+---------+---------+--------+
| 9819354 | 8527786 | 0 | 2405789 | 2405789 | 1114221 | 7413565 | 1291568 | 0 |
+---------+-------------+----------------------+-------------+----------------------+---------+---------+---------+--------+
Alles geht schön auf:
n = s1m1 + s0m1 + s1m0
COUNT(s_id) entspricht Anzahl rows von s
COUNT(m_id) = COUNT(DISTINCT m_id) = s1m1 +s0m1 = Anzahl rows von m
etc.
Seltsam ist, dass COUNT(DISTINCT s_id) 0 ergibt !!
Wie ist das möglich?
Besten Dank für Hinweise.
Gruss
giordano
Comment