[sql] Problem mit dem Vergleich von gruppierten Werten zw. zwei Tabellen ...

midiboy

Grünschnabel
HI !

Hab dieses wunderbare Forum gefunden und nachdem ich gerade an einem SQL Projekt arbeite und noch relativer Neuling bin, bräuchte ich dringend Hilfe !

Wär toll wenn mir jemand helfen könnte !

Ich muß aus 2 Tabellen die Anzahl der Fragen ermitteln, bei denen ALLE RF Werte pro Frage gleich sind ! Klingt einfach, aber ich sitzt schon seit Tagen an dem Problem. Zur Verdeutlichung hab ich ein Bild attached. Da sieht man 3 Fragen pro Tabelle, jede Frage hat 3 Antworten und jede Antwort ist entweder richtig oder falsch ( RF Wert ). Die Frage zählt nur dann als richtig wenn alle 3 RF Werte pro Frage übereinstimmen, sonst zählt sie als falsch.

Versteht Ihr was ich so ca. meine ? :)

Ich habs schon mit abenteuerlichen SQL statements versucht, aber es kommt bei Testbeispielen manchmal was falsches raus oder aber die Syntax stimmt nicht, wenn ich beginne mit "group by" oder "having" zu arbeiten ... :(

Ich hoffe, es kann mir jemand von euch helfen !

Vielen Dank!
midiboy
 

Anhänge

  • vergleich.jpg
    vergleich.jpg
    15,8 KB · Aufrufe: 31
Hey !

Hab das Problem jetzt umgangen indem ich alle Antworten zähle, die falsch waren, und das von der Gesamtantwortzahl abziehen. Dadurch daß nur 1 Antwort falsch sein muß damit die frage als falsch beantwortet gilt hab ich einfach ein

Select count(distinct Frage_ID)
from Tabelle 1
where Frage_ID in

( select Frage_ID from Tabelle 1 A
-- 2 nötige joins --
where A.Frage_ID = B.Frage_ID
and A.Antwort_ID = B.Antwort_ID
and A.RF != B.RF
group by A.Frage_ID)

gemacht.

Interessieren würds mich aber doch wie man auch alle richtigen per SQL rausfindet (also alle Fragen wo alle RF Werte pro Antwort übereinstimmen) ohne den Umweg über die Subtraktion der Falschen von Allen Fragen zu gehen. Vielleicht fällt ja jemandem was dazu ein ? Kann man sicher mal brauchen !

:)

Danke !
midiboy
 
Hallo,


ich verstehe die Aufgabe noch nicht richtig.

Möchtest du folgendes Ergebnis haben:

Tabelle A: 3 richtige
Tabelle B: 3 falsche?

Es würde mir helfen, wenn du schreibst, wie das Ergebnis aussehen sollte.
 
Hey Movera,

danke für die Antwort. Ok, nein, das hab ich wohl falsch erklärt.

In Tabelle 2 sind die Ausgangsdaten (ob eine Antwort zu einer Frage richtig oder falsch ist zb )

In Tabelle 1 ist das Ergebnis nach dem test gespeichert, das heisst wie der Benutzer geantwortet hat.

Im vorliegenden Fall sind alle 3 Fragen falsch beantwortet worden ( war auch nur ein Testbeispiel um zu sehen was die Prozedur berechnet wenn alle Felder 0 sind).

Alles klar jetzt ? :)

Ciao,
midiboy
 
Hallo,

kann sein, das du dir die Lösung so vorstellst:

alle falsch beantworteten Fragen (macht keinen Sinn, weil es sowohl falsche als auch richtige Antworten gibt):

select a.frage_id
from Tabelle1 a, Tabelle2 b
where a.frage_id = b.frage_id
and a.antwort_id = b.antwort_id
and a.rf != b.rf
group by a.frage_id

FRAGE_ID
---------
1
2
3



alle falschen Antworten:

select a.frage_id, a.antwort_id
from Tabelle1 a, Tabelle2 b
where a.frage_id = b.frage_id
and a.antwort_id = b.antwort_id
and a.rf != b.rf
group by a.frage_id, a.antwort_id

FRAGE_ID ANTWORT_ID
--------- ----------
1 1
2 5
3 7
3 9

alle richtigen Antworten:

select a.frage_id, a.antwort_id
from Tabelle1 a, Tabelle2 b
where a.frage_id = b.frage_id
and a.antwort_id = b.antwort_id
and a.rf = b.rf
group by a.frage_id, a.antwort_id

FRAGE_ID ANTWORT_ID
--------- ----------
1 2
1 3
2 4
2 6
3 8

alle Antworten (möglich, das MySQL das nicht kann):

1 select a.frage_id, a.antwort_id, decode(a.rf,b.rf,'richtig','falsch')
2 from Tabelle1 a, Tabelle2 b
3 where a.frage_id = b.frage_id
4 and a.antwort_id = b.antwort_id
5* group by a.frage_id, a.antwort_id, decode(a.rf,b.rf,'richtig','falsch')

FRAGE_ID ANTWORT_ID DECODE(
--------- ---------- -------
1 1 falsch
1 2 richtig
1 3 richtig
2 4 richtig
2 5 falsch
2 6 richtig
3 7 falsch
3 8 richtig
3 9 falsch
 
Zurück