Gleitender Mittelwert

Ekaiser

Benutzer
Beiträge
5
Hallo,
ich habe ein Problem das ich einfach nicht auf die Reihe bekomm.

Eine Tabelle mit Meter und Kraft Einträgen.

Meter; Kraft
1,4; 100
1,7; 103
1,9; 109
2,1; 98
2,5; 107
3,8: 110
....
....
....

Nun würde ich gerne für alle 2 Meter ein AVG(Kraft) machen.

Also
von
0-2Meter = 104
2,1-4Meter = 105
...
...
...

Ist es möglich eine solche Verdichtung direkt mit einem SQL Statement durchzuführen?

Vorab gleich mal Danke!
LG
Ernst
 
Werbung:
Code:
edb=*# select * from ekaiser ;
 meter | kraft
-------+-------
   1.4 |   100
   1.7 |   103
   1.9 |   109
   2.1 |    98
   2.5 |   107
   3.8 |   110
(6 rows)

edb=*# select (2*div(meter,2))::text || '-' || ((div(meter,2)+1)*2)::text || ' Meter' as "Bereich", avg(kraft) from ekaiser group by 1 order by 1;
  Bereich  |         avg         
-----------+----------------------
 0-2 Meter | 104.0000000000000000
 2-4 Meter | 105.0000000000000000
(2 rows)

edb=*#
 
Guter Ansatz!
Die Leuchte ist nun an:)

Habe das mal auf MSSQL uebersetzt

SELECT CONCAT(Round(([Meter]/2), 0, 1) * 2, '-', (ROUND(([Meter]/2),0,1) +1)*2 ) AS "Bereich",
AVG(Kraft)
FROM ekaiser
GROUP BY CONCAT(Round(([id19883_Vermess_TunnelLaenge_m]/2), 0, 1) * 2, '-', (ROUND(([id19883_Vermess_TunnelLaenge_m]/2),0,1) +1)*2 )
Order By Bereich

Danke nochmals!
PS: Warum er mir bei Group By nicht "Bereich" nimmt ist mir ein Rätsel...

LG
 
PS: Warum er mir bei Group By nicht "Bereich" nimmt ist mir ein Rätsel...

tja...

Code:
edb=*# select (2*div(meter,2))::text || '-' || ((div(meter,2)+1)*2)::text || ' Meter' as "Bereich", avg(kraft) from ekaiser group by "Bereich" order by "Bereich";
  Bereich  |         avg         
-----------+----------------------
 0-2 Meter | 104.0000000000000000
 2-4 Meter | 105.0000000000000000
(2 rows)

edb=*#

bessere Datenbank verwenden?
 
Habe gerade gesehen das ich in meiner Übersetzung noch bei group by die original columns drinnen habe, da sollte natürlich auch meter statt vermess_tunnellaenge.. stehen

...nur zur Vervollständigung
 
tja...

Code:
edb=*# select (2*div(meter,2))::text || '-' || ((div(meter,2)+1)*2)::text || ' Meter' as "Bereich", avg(kraft) from ekaiser group by "Bereich" order by "Bereich";
  Bereich  |         avg        
-----------+----------------------
 0-2 Meter | 104.0000000000000000
 2-4 Meter | 105.0000000000000000
(2 rows)

edb=*#

bessere Datenbank verwenden?
Und die wäre dann welche genau?`Stimmt ja, Du kennst dich ja nur bis zum Postgres Tellerrand aus.
 
Werbung:
Zurück
Oben