Ich habe zwei Tabellen mit einer Viele-zu-Viele-Zuordnung in Postgresql. Die erste Tabelle enthält Aktivitäten, die keine oder mehrere Gründe zählen kann:Abfrage, um die Häufigkeit von Viele-zu-Viele-Verknüpfungen zu zählen
CREATE TABLE activity (
id integer NOT NULL,
-- other fields removed for readability
);
CREATE TABLE reason (
id varchar(1) NOT NULL,
-- other fields here
);
für den Verband durchgeführt wird, eine Join-Tabelle existiert zwischen diese beiden Tabellen:
CREATE TABLE activity_reason (
activity_id integer NOT NULL, -- refers to activity.id
reason_id varchar(1) NOT NULL, -- refers to reason.id
CONSTRAINT activity_reason_activity FOREIGN KEY (activity_id) REFERENCES activity (id),
CONSTRAINT activity_reason_reason FOREIGN KEY (reason_id) REFERENCES reason (id)
);
Gerne möchte ich zählen möglicher Zusammenhang zwischen Aktivitäten und Gründen.
+--------------+------------+
| activity_id | reason_id |
+--------------+------------+
| 1 | A |
| 1 | B |
| 2 | A |
| 2 | B |
| 3 | A |
| 4 | C |
| 4 | D |
| 4 | E |
+--------------+------------+
Ich sollte so etwas wie haben:
+-------+---+------+-------+
| count | | | |
+-------+---+------+-------+
| 2 | A | B | NULL |
| 1 | A | NULL | NULL |
| 1 | C | D | E |
+-------+---+------+-------+
Oder schließlich, so etwas wie: Ich habe diese Datensätze in der Tabelle activity_reason
Gesetzt
+-------+-------+
| count | |
+-------+-------+
| 2 | A,B |
| 1 | A |
| 1 | C,D,E |
+-------+-------+
kann ich nicht finden, die SQL-Abfrage, um dies zu tun.
Was zählen Sie? Ich bin verwirrt, weil Ihr Beispielergebnis "C, D, E" darin enthält, aber Ihre Beispieldaten haben nirgendwo ein "D". Versuchen Sie, alle Ursachen-Ursachen zu erhalten, die an eine Aktivitäts-ID gebunden sind? – rdubya
'Ich entferne die Einschränkung für Lesbarkeit. Das ist ein Missverständnis. *** Entfernen Sie niemals Einschränkungen, die für die Klarheit notwendig sind. Angenommen, eine typische Implementierung mit einem PK auf '(activity_id, reason_id)'. –
@rdubya: Ich habe die fehlenden Buchstaben repariert. –