[db2] SQL-Anfrage

Also, bei diesem Einzeiler wird ja immer nur die betroffene Schule in Betracht gezogen (wegen GROUP BY).

Kleine Rückfrage: Wie sind die Daten abgelegt? Schule01 in Tabelle1 usw.? Wie kommt die Aussage zu Stande, dass der Record "Schule_02 15" aus den Quelldaten eine Spende von 15 der Schule_02 an Schule_01 ist?
 
Hallo j2se,

vielen Dank für die Antwort.

Ich habe lediglich eine einzige Tabelle:
diese Tabelle listet halt alle Schulen auf und wieviel Spenden sie bekommen.

Schule_02 15
bedeutet, dass Schule_02 schon mal eine Spende in Höhe von EUR 15 erhalten hat.

Code:
Schule        Spendenbetrag
---------------------------
 
Schule_01     15
Schule_01     20
Schule_01     30
Schule_02     30

Schöne Grüße aus Rheinland,

Eure Ratna
 
Gegeben sei die Quelle

Ausgangstabelle ist folgendes(redundante Records sind erlaubt):

Code:
Schule        Spendenbetrag
---------------------------
 
Schule_01     15
Schule_01     20
Schule_01     30
Schule_01     30
Schule_02     15
Schule_02     100
Schule_03     15

Ich meine diese Aussage:

Schule_01 hat als Anzahl die 2, einmal der Spendenvorgang von Schule_02, einmal von Schule_03. Die beiden Spendenvörgänge sind ja jeweils in Höhe von EUR 15.

Ist schon klar. Ich sehe nur keine Logik dahinter, wenn der Spendevorgang von Schule_03 nochmals zur Schule_02 gezählt wird. Sorry, ich bin es gewohnt, reale Vorgänge im Geschäft abzubilden, was mir bei dieser Spendertabelle gerade nicht einleuchtet.
 
Zuletzt bearbeitet:
Hallo j2se,

na ja, die Logik ist halt:
ich möchte gerne Schule_01 berichten können, wieviele Spendenvorgänge in Höhe von EUR 15 es bei anderen Schulen gegeben hat. Analog zu den anderen Schulen.

Aber angesicht der hundert von Millionen Datensätzen finde ich 1,5 Stunden Ausführungszeit schon gut. Vielen Dank nochmal.

Schöne Grüße aus Rheinland,

Eure Ratna
 
Aber angesicht der hundert von Millionen Datensätzen finde ich 1,5 Stunden Ausführungszeit schon gut. Vielen Dank nochmal.

Dann kann ich also auch ruhig schlafen :) solange sich kein DBA meldet!

Sobald ich wieder im Büro bin, werde ich eine Testtabelle mit einigen Mio Datensätzen aufbauen und eine optimierte Abfrage basteln.
 
Zuletzt bearbeitet:
SQL:
select 
  name, 
  sum(own_cnt_15) over () - own_cnt_15 as foreign_cnt_15
from 
  (
    select 
      name,
      sum(case when betrag = 15 then 1 else 0 end) as own_cnt_15
    from 
      schule2
    group by 
      name
  )
order by 
  name;

oder

SQL:
SELECT  name,
        (SELECT COUNT(*) FROM schule2 WHERE betrag = 15) - SUM(CASE WHEN betrag = 15 THEN 1 ELSE 0 END) AS foreign_cnt_15
FROM    schule2 
GROUP BY name
ORDER BY name;
 
Hallo BaseBallBatBoy,

vielen Dank für die Codes. Ich probiere sie mal einzeln aus, welcher schneller seine Dienste fertig bringt. :)

Schöne Grüße aus Rheinland,

Eure Ratna
 
Zurück