semteX
begehrt die rostschaufel
|
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: Tabelle: test
|--- name ---|--- val ---|
asdf 10
ghij 7
klmn 3
ich möcht jetzt, dass er mir folgende ausgabe möchte ich jetzt: asdf 10 ghij 7 und die beschränkung soll sein: wenn die summe der datensätze, die er atm selektiert hat, 17 übersteigt, soll er abbrechen... würd also von der logik etwa so aussehen: SELECT name, val FROM test WHERE sum(val) <= 17 nur, dass WHERE keine aggregation tolleriert... wo hab ich nen knoten im hirn?
Bearbeitet von semteX am 07.12.2007, 16:47
|
pong
Addicted
|
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
|
semteX
begehrt die rostschaufel
|
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..
|
Nico
former person of interest
|
geht das überhaupt mit sql was du da willst?
|
semteX
begehrt die rostschaufel
|
ich hab vor 12 monaten so krassn ******* mit SQL statements gemacht... da kann i ma ned vorstellen, dass so was ned geht ![:D](/images/smilies/biggrin.gif) i werd mal alle unterlagen vom letzten jahr zamsuchn ob ma da mal was in die richtung gmacht haben
|
Burschi1620
24/7 Santa Claus
|
|
kleinerChemiker
Here to stay
|
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.
|
LoSerRaTiO
www.krenker.at
|
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.
|
LoSerRaTiO
www.krenker.at
|
Gehts dann vielleicht so:
mysql> select sum(val),name from bla group by name
-> having sum(val)<=17;
also imho gibt dieses statement seine beispieltabelle 1:1 aus, höchstens er hat entweder gleiche namen, die zusammen über 17 ergeben oder vals über 17 --> die würden dann nicht ausgegeben werden.
|
semteX
begehrt die rostschaufel
|
mysql> select sum(Umsatz),Ort from testerone group by Ort
-> having sum(Umsatz)>=50000;
hab ich von hier gefunden: http://www.infos24.de/mysqle/handbuch/3_mysql_count.htm
Gehts dann vielleicht so:
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 beziehen i fürcht langsam auch, dass das mit purem SQL ned geht... naja hilft nix, wirds halt in die business logik ausgelagert... danke an die helfer edit: ja, klar, mit pl sql bzw stored procedures + cursor wärs machbar... nur da kann ich dann gleich in die business logik gehen, da bleibt die wartbarkeit eher erhalten..
|
Luzandro
Here to stay
|
Du könntest ein Subselect machen: SELECT t1.name, t1.val
FROM test t1
WHERE (SELECT sum(t2.val) FROM test t2 WHERE t2.name <= t1.name) <= 17
edit: oder das müsste auch aufs gleiche rauslaufen: 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
Bearbeitet von Luzandro am 08.12.2007, 07:54
|
semteX
begehrt die rostschaufel
|
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!
|
Luzandro
Here to stay
|
die idee wär prinzipiell ned schlecht, wenn ich ned nach val sortieren würd.... 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.val
|
semteX
begehrt die rostschaufel
|
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
|