WCM Forum

WCM Forum (http://www.wcm.at/forum/index.php)
-   Programmierung (http://www.wcm.at/forum/forumdisplay.php?f=17)
-   -   [SQL] Statistik (http://www.wcm.at/forum/showthread.php?t=157343)

jak 29.01.2005 19:32

[SQL] Statistik
 
Kann man mit SQL (MySQL) zwei Summen (SUM) dividieren?
Ich möchte den gewichteten Durchschnitt vom Wert w1 mit w2 gewichtet berechnen.
Das wäre
SUM(w1*w2)/SUM(w2).
SELECT SUM(w1*w2)/SUM(w2) FROM ... geht aber nicht. Geht das überhaupt oder muß ich das im Programm machen?

Außerdem würde ich gerne den Durchschnitt aus Summen berechnen, etwas in der Art:
sums=SELECT SUM(w1) FROM table GROUP BY w2
SELECT AVG(sums);
Das funktion iert in der Form klarerweise auch nicht. hat wer eine Idee wie das gehen könnte?

Jak

T.dot 29.01.2005 23:34

Hi!

Ich kann nicht dafür garantieren, das funktioniert - einfach probieren, kommt auch auf den sql-dialekt an, den du verwendest ;)

select sum(w1) as Bla, sum(w2) as Blub, Bla/Blub as DasWasDuHabenWillst From ...

oder vl.

Select (Select sum(w1) from ...)/(Select sum(w2) from ...) as DasWasDuHabenWillst from ...

Gleiches fürs zweite:

Select avg(Select sum(w1) from ...) from ...

Wobei mysql Unterabfragen erst ab einer bestimmten Version unterstützt ;) (bei mir gehts auf jeden Fall schon)...

Sonst musst es wohl oder übel über einen Zwischenschritt machen - vl. gehts auch über eine Stored-Procedure - damit kenn ich mich aber wirklich zu wenig aus...

mfg T.

jak 30.01.2005 12:11

Ich verwend MySQL 4.0.21.
Werd' wohl updaten müssen.

Deine Vorschläge enden alle in Fehlermeldungen:
SELECT SUM(w1*w2) AS s1, SUM(w2) AS s2, s1 / s2 FROM table

#1054 - Unknown column 's1' in 'field list'

SELECT (SELECT SUM(w1*w2) FROM table) / (SELECT SUM(w2) FROM table ) AS test
FROM table

#1064 - You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near 'SELECT SUM( w1*w2 ) FROM table ) / ( SELECT SU



#1064 - You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near 'SELECT SUM(w1) FROM table GROUP BY w2) FROM ta

Man kann die Probleme aber mit 2 SQL-Statements lösen:
SELECT @s1 := SUM(w1*w2) , @s2 := SUM(w2) FROM table;
SELECT @s1 / @s2 FROM table LIMIT 1

SELECT @s1:=SUM( hours )
FROM courses
GROUP BY semester ;
SELECT AVG(@s1) FROM courses;

Find' ich aber nicht besonders schön, vor allem weil das 2. Falsche Werte liefert.
Jak


Alle Zeitangaben in WEZ +2. Es ist jetzt 04:44 Uhr.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
© 2009 FSL Verlag