Abfrage mit Abhängigkeit aus einer Tabelle
Lulinda
- datenbank
Hallo!
Ich habe hier einen riesigen Knoten im Hirn... Hoffe, mir kann jemand helfen.
Tabelle für eine Umfrage. In einer stehen die Ergebnisse:
voteID = eine votende Person, also 1 abgeschicktes Formular
questionID = ID der Frage (z.B. Alter)
answerID = ID der Antwort (z.B. über 50)
+--------+------------+----------+
| voteID | questionID | answerID |
+--------+------------+----------+
| 1 | 1 | 1 |
| 1 | 2 | 3 |
| 1 | 4 | 6 |
| 1 | 5 | 8 |
| 1 | 7 | 9 |
| 1 | 8 | 11 |
| 1 | 9 | 13 |
| 1 | 10 | 15 |
| 2 | 1 | 1 |
| 2 | 2 | 4 |
| 2 | 4 | 5 |
| 2 | 5 | 8 |
| 2 | 7 | 10 |
| 2 | 8 | 11 |
| 2 | 9 | 13 |
| 2 | 10 | 16 |
| 2 | 12 | 18 |
| 3 | 18 | 29 |
| 3 | 21 | 36 |
usw....
Nun möchte ich abfragen, wer auf eine Frage mit einer bestimmten Antwort zugleich auf eine andere Frage mit einer bestimmten Antwort geantwortet hat.
Sprich:
Wie viele Personen über 50 sind weiblich?
Also (exemplarisch)
wie viele unterschiedliche voteID's gibt es, die folgendes erfüllen:
questionID = 1 mit answerID = 3
und
questionID = 3 mit answerID = 33
Wie frage ich das ab?!?! Und schäm ich mich gleich, weil die Abfrage so simpel ist??
Danke für Feedback,
Lulinda.
Hi,
*autsch*, vielleicht denke ich auch zu kompliziert, aber ich finde das gerade tatsächlich etwas knifflig.
SELECT voteID, COUNT(*) AS anzahl
FROM tabelle
WHERE
((questionID = 1) AND (answerID = 3))
OR
((questionID = 3) AND (answerID = 33))
GROUP BY voteID
HAVING anzahl = 2
Vielleicht klappts so.
MfG
Rouven
Also (exemplarisch)
wie viele unterschiedliche voteID's gibt es, die folgendes erfüllen:
questionID = 1 mit answerID = 3
und
questionID = 3 mit answerID = 33Wie frage ich das ab?!?! Und schäm ich mich gleich, weil die Abfrage so simpel ist??
Danke für Feedback,
Lulinda.
Select a.voteID
From Umfrage a, Umfrage b
Where (a.questionID=1 and a.answerID=3)
and (b.questionID=3 and b.answerID=33)
and a.voteID=b.voteID;
Die Klammern kannst du auch weglassen, die hab ich nur zur einfacheren Leseart genommen. Im Endeffekt geht es nur darum, dass du zwei Abfragen miteinander verknüpfst. Die Abfrage nach questionID=1 und answerID=3 mit der Abfrage nach questionID=3 und answerID=33. Da du nur die Fälle haben willst, wo beides gleich ist musst du dann noch angeben, dass die voteID bei beíden Abfragen gleich ist und ... voila.
Natürlich ist das noch nicht ganz die richtige Antwort auf deine Frage. Du wolltest ja die Anzahl der voteID's wissen und nicht die voteID's selbst.
Also: Ersetze "Select a.voteID" durch "Select count(a.voteID) as Anzahl" und schon hast du das, was du willst.
MfG Mero