Summe aus Subquery

Ist es möglich die Summer aus einem Subquery zu bilden?

Im Subquery wird eine Abfrage geamacht
SELECT s1 FROM t1 WHERE … ORDER BY s1 DESC LIMIT 3

Aus diesen 3 Zeilen die zurückgegebn werden soll die Summe gebildet werden.

SELECT SUM(SELECT s1 FROM t1 WHERE … ORDER BY s1 DESC LIMIT 3), s2, s3 FROM t2
funktioniert jedenfalls nicht.

Viele Grüße

du kannst eine query (select) auch als column expression verwenden …

deine idee war schon richtig … nur du darfst sum nicht auf eine query anwenden (ich hoffe das stimmt :O)) … du musst die summe in der subquery selektieren … ich bezweifle aber, dass LIMIT in einer subquery erlaubt ist …

also so z.B.

select
feld 1,
(select sum(…) from table as t2 where t2.ref_id = t1.id) as summe,
feld 2
from table as t1
where…

edit. .

also das mit limit scheint tatsaechlich acuh in einer subquery erlaubt zu sein … nagut … nur wird wohl select sum(…) limit x nicht den effekt haben den du dir wuenschst …

Schön wäre auch eine Fehlermeldung …

ERROR: syntax error at or near “SELECT”
SQL Status:42601
Zeichen:101

LINE 1: … , SUM(SELECT …

Genau. LIMIT und SUM in Verbindung ist nicht möglich. Deswegen wollt eich vorher die Abfrage machen und dann die Summe bilden.

ja … das ist nicht erlaubt … du musst
SELECT (select sum(…) from … ) usw. notieren …

aggregate sind nicht auf subqueries anwendbar …

doch limit kannst du immer anwenden auch in subqueries … nur dieses limit bringt dir nichts, weil das limit sich auf die ergebnismenge des sum /group by bezieht und nicht als WHERE bedinung zieht … du musst dir eine WHERE klausel einfallen lassen ueber die zu summierenden datensaetze …

Naja sowies aussieht funktioniert das nicht im Query.
Da muss ich mal wieder eine Funktion schreiben.

Die Idee mit WHERE hatte ich auch schon. Nur kann ich kein >= oder ähnliches anweden, weil ich genau die 3 höchsten brauche. Wenn z.B. das dritthöchste genauso groß ist wie das vierthöchste würde er dann die ersten 4 summieren.

nein musst du (wahrscheinlich) nicht

select sum(feld)
from table t
where t.id in (select id from table t2 order by … limit 3)

und das konstrukt kannst du dann insgesamt als column-expression in deiner anderen query einbauen …