erst filtern dann werte addieren

Hallo Leute,
Folgender HeckMeck:
aid bid
-----------
11 2
11 3
12 2
12 1
ich möchte die größte Zahl (bid) der gleichen aid rausbekommen und alle addieren.
Also 3 +2 = 5
Meine Versuche blieben erfolglos!

Danke
 
Und was hast du bisher versucht?

Ich kenn die Lösung aber du sollst ja nach Möglichkeit selbst drauf kommen.
 
tja, so etwas rumgespielt ...
PHP:
      SELECT MAX(bid), SUM(aid) FROM table WHERE 1 GROUP BY pid
... ich weiß das es wenig Sinn ergibt, aber ich komme nicht drauf!

select Sum (max(bid)) funktioniert ja nicht
 
Im MySQL Manual gibt es schöne Beispiele wie man GROUP BY verwendet:
GROUP BY (Aggregate) Functions

Überlege welche Spalte die Gruppe bestimmt die zusammenrechnen möchtest und wovon du die Summe und das Maximum haben möchtest. Das einfach genau so hinschreiben.
 
- gruppieren nach aid
- Maximum herausbekommen
- summieren

PHP:
SELECT aid, MAX(bid), SUM(bid) FROM table WHERE 1 GROUP BY aid

So meine Idee, die aber nicht will!
 
versuche es doch mal auf 2 schritte

1.

PHP:
select max() from bla

$ergebniss = aid

2.

PHP:
select summe() from bla
where aid =  $ergebniss

natürlich musste noch den php code vollständig schreiben
 
Matthias, was funktioniert an deiner geposteten Lösung denn nicht?
Was bekommst du denn für Ergebnisse raus?
Und warum hast du da das "WHERE 1" drin?

Bei mir kommt bei der Anfrage das richtige Ergebnis raus.

Kleiner Tipp noch: Stelle den SQL-Query zwischen [code=sql]...[/code]statt [code=php]...[/code]
 
also das WHERE = 1 --> da steht bei mir noch eine Bedingung! Egal.
Also bei mir klappt das leider nicht!
Die gewählten Zahlenbeisp. sind hier schlecht gewählt! Bei Dir kommt 5 raus hat aber falsch gerechnet! Neues Bsp.:
aid bid
-----------
11 1
11 1
11 4
12 1
12 1
12 1
Ergebnis sollte 4 + 1 = 5 sein! Da 4 das max bei aid(11) u. 1 das max bei aid(12) ist!
 
Ach du willst die Maxima addieren? Sag das doch gleich. Das kam bei mir bisher nicht an.

Also um die Maxima zu bekommen ohne MAX zu benutzen:
SQL:
SELECT * 
FROM `table` a LEFT JOIN `table` b ON a.bid = b.bid AND a.aid < b.aid 
WHERE b.aid IS NULL;

Problem ist dabei jedoch, dass auch mehrere MAXIMA ausgegeben werden. Um die Abfrage wirklich zu verstehen lass mal die Bedingung im WHERE weg und guck dir das Ergebnis an.

Daher muss man beim summieren noch ein DISTINCT mitgeben:
SQL:
SELECT SUM(DISTINCT a.aid) 
FROM `table` a LEFT JOIN `table` b ON a.bid = b.bid AND a.aid < b.aid 
WHERE b.aid IS NULL;
 

Neue Beiträge

Zurück