MySQL5: sum(distinct kosten)

jeipack

Erfahrenes Mitglied
Hi
Mal angenommen ich habe über mehrere Joins nun mehrmals den gleichen Datensatz von der Tabelle mit den Kosten:

ID | Kosten
1 | 12.0
2 | 11.5
3 | 10.0
1 | 12.0
2 | 11.5
3 | 10.0

Mit einem sum(Kosten) bekomme ich 67.5 - was natürlich falsch ist. Also könnte man ja ein sum(distinct Kosten) nehmen und käme dann auf 33.5 - was hier richtig ist.

Wenn die Tabelle aber so aussieht:

ID | Kosten
1 | 12.0
2 | 11.5
3 | 12.0
1 | 12.0
2 | 11.5
3 | 12.0

Funktioniert sum(distinct Kosten) nicht mehr (ergibt 23.5 - richtig wäre aber 35.5). Das Problem ist, dass die Zahl 12.0 zweimal bei unterschiedlichen Datensätzen vorkommt.

Für diesen Fall kann ich es noch so lösen:

sum(kosten)/(count(id)/count(distinct id))

Wenn aber nicht jeder Datensatz doppelt vorkommt:

ID | Kosten
1 | 12.0
2 | 11.5
3 | 12.0
2 | 11.5
3 | 12.0

Funktioniert das auch nicht mehr.

Mich würde interessieren wie ihr hier vorgeht und ob es eventuell eine elegante (!= mehrere Queries) Lösung für das Problem gibt?

Grüsse
jeipack
 
Was hälst du davon?

SQL:
CREATE VIEW vKosten AS 
SELECT id,AVG(kosten) as kosten FROM table GROUP BY id

SQL:
select sum(kosten) from vKosten

Das würde gehen.
 
Zuletzt bearbeitet:
Hey
Habs ganz ähnlich gemacht:

SQL:
select sum(b.kosten) from (
select id, kosten from tbl_kosten
group by id) as b;

Wenn mans vereinfacht (richtige Abfrage hat etwa 10 joins) sieht man auf einmal neue Möglichkeiten :D

Danke
Gruss
 
Zurück