2016-06-13 31 views
0

Sagen, ich habe die folgenden 3 Tabellen: Tabelle 1 (Sessions)In MySQL, wie man eine Anzahl von Datensätzen zurückgibt, wo die Summe von zwei Säulen in verwandten Tabellen gleich einem bestimmten Wert ist?

SessionID SessionName 
1   Running 
2   Jumping 
3   Skipping 
4   Running 
5   Running 

Tabelle 2 (Reservierungen)

ID SessionID UserID Attended 
1 1   1  1 
2 4   2  1 
3 4   3  0 
4 2   1  1 
5 5   4  1 

Tabelle 3 (OtherBookings)

ID SessionID GroupID NumberAttended 
1 1   1  1 
2 1   2  32 
3 2   1  4 
4 4   3  3 
5 4   4  1 

ich finden wollen die Anzahl der Sitzungen, in denen der Sitzungsname 'Running' lautet, und die Summe der Teilnehmer (aus den anderen beiden Tabellen ist größer als ein gegebener Wert, z. B. 5). So etwas wie:

SELECT COUNT (*) AS SessionTotal ... , DIE SUMME (Bookings.Attended + OtherBookings.NumberAttended)> 5

+0

Wie würde das gewünschte Ergebnis aussehen? – Strawberry

+0

Also würde ich einfach die Anzahl der Sitzungen (z.B. 10) als mein Ergebnis haben wollen, wo ich den Sitzungsnamen z.B. Läuft und spezifiziert auch den überwachten Betragsschwellenwert, z. > 10 (muss aus den Tabellen Bookings und OtherBookings berechnet werden) - hoffe, dass das Sinn macht. –

+0

Das macht Spaß. Wie sieht das gewünschte Ergebnis aus? – Strawberry

Antwort

0

Würde das funktionieren?

SELECT count(*) 
FROM sessions s 
WHERE IFNULL((SELECT sum(b.attended) FROM bookings b WHERE b.sessionid = 
      s.sessionid AND s.sessionname = 'Running'), 0) 
     + 
     IFNULL((SELECT sum(o.numberattended) FROM otherbookings o WHERE 
      o.sessionid = s.sessionid AND s.sessionname = 'Running'), 0) 
     > 5; 

Hier ist sqlfiddle.

Diese Abfrage zählt die Summe für zwei Tabellen getrennt in Unterabfragen und fügt dann die Ergebnisse zusammen. IFNULL ist da, um einen Fall zu behandeln, wenn eine der Unterabfragen null zurückgibt.

+0

Danke - ich denke, das wird den Trick machen. –