URL: https://www.overclockers.at/coding-stuff/sql_statement_mit_sum_188827/page_1 - zur Vollversion wechseln!
Wiedermal ne gschicht wo ich mir dachte "is ja eh ganz easy"... die aber dann irgendwie beim schreiben auf einmal gar nimmer so einfach ist... folgendes testsetup:
Code:Tabelle: test |--- name ---|--- val ---| asdf 10 ghij 7 klmn 3
select name, sum(val) as a from irgendwo where a <= 17 group by name ?
pong
ps: Wennst es in einem Programm verwendest, den Indicator nicht vergessen
das geht leider ned weil das a wieder ne sum ist => aggregation.
das selbe ding mit having funktioniert aber auch nicht, weil er, bei group by name, immer nur "asdf 10", "ghij 7" ... als "summe" sieht..
geht das überhaupt mit sql was du da willst?
ich hab vor 12 monaten so krassn ******* mit SQL statements gemacht... da kann i ma ned vorstellen, dass so was ned geht
i werd mal alle unterlagen vom letzten jahr zamsuchn ob ma da mal was in die richtung gmacht haben
hab ich von hier gefunden:Code:mysql> select sum(Umsatz),Ort from testerone group by Ort -> having sum(Umsatz)>=50000;
Code:mysql> select sum(val),name from bla group by name -> having sum(val)<=17;
du mußt erst aggregieren und kannst dann davon die summe berechnen.
aber so lange zu aggregieren bis die summe einen wert erreicht, geht mw nicht.
das geht mit einer standard-sql query nicht, da die aggregation ja zusätzlich auch noch von der order der query abhängig ist.
einfachste variante imho: Stored Procedure mit Cursor
(zumindest mal am MSSQL bzw MySQL 5...)
ein einbau in die anwendungslogik bringt dich aber vermutlich mal schneller zum ziel.
Zitat von Burschi1620Gehts dann vielleicht so:Code:mysql> select sum(val),name from bla group by name -> having sum(val)<=17;
funktioniert hier leider nicht... durch das group by gruppiert er alle mit der selben bezeichnung zusammen (in dem fall bez und bildet hier die Summe. da ich aber immer andere bezeichnungen habe fährt das hier ins leere, die SUM würde sich immer nur auf eine einzelne zeile beziehenZitat von Burschi1620hab ich von hier gefunden:Code:mysql> select sum(Umsatz),Ort from testerone group by Ort -> having sum(Umsatz)>=50000;
http://www.infos24.de/mysqle/handbuch/3_mysql_count.htm
Gehts dann vielleicht so:Code:mysql> select sum(val),name from bla group by name -> having sum(val)<=17;
Du könntest ein Subselect machen:
Code:SELECT t1.name, t1.val FROM test t1 WHERE (SELECT sum(t2.val) FROM test t2 WHERE t2.name <= t1.name) <= 17
Code:SELECT t1.name, t1.val FROM test t1, test t2 WHERE t2.name <= t1.name GROUP BY t1.name, t1.val HAVING sum(t2.val) <= 17
die idee wär prinzipiell ned schlecht, wenn ich ned nach val sortieren würd....
ich habs jetzt in die business logik geschmissen, danke für euren Input!
das ist ja grundsätzlich egal - du müsstest halt nur auch im WHERE-Statement die Reihenfolge berücksichtigen, also statt t2.name<=t1.name eben t2.val<=t1.valZitat von semteXdie idee wär prinzipiell ned schlecht, wenn ich ned nach val sortieren würd....
wenn mal zeit ist tret ich das auf die schnelle übern postgre admin... ich hab es zwar jetzt scho über die business logik gelöst, allerdings würd es mich interessiern ob das ergebniss gestimmt hätt
overclockers.at v4.thecommunity
© all rights reserved by overclockers.at 2000-2025