MySQL Summe in eine Spalte bilden

pauline1

Benutzer
Beiträge
14
hallo ,
wie kann ich eine Summe in eine Tabelle berechnen und einspielen:

Tabelle:
plz insgesamt summe
06 6
04 5
03 4

ich würde gerne die summe von 3 PLZ berechnen und einepielen, damit das im enddefekt so aussieht:
plz insgesamt summe
06 6 15
04 5 15
03 4 15

Berechnen kann ich mit Sum, aber wie kann ich das einspielen?

Im Voraus vielen Dank für Eure Antworte,

Pauline
 
Werbung:

akretschmer

Datenbank-Guru
Beiträge
9.028
hallo ,
wie kann ich eine Summe in eine Tabelle berechnen und einspielen:

Tabelle:
plz insgesamt summe
06 6
04 5
03 4

ich würde gerne die summe von 3 PLZ berechnen und einepielen, damit das im enddefekt so aussieht:
plz insgesamt summe
06 6 15
04 5 15
03 4 15

Berechnen kann ich mit Sum, aber wie kann ich das einspielen?

Im Voraus vielen Dank für Eure Antworte,

Pauline

Code:
test=*# select * from pauline ;
 plz | insgesamt | summe
-----+-----------+-------
 06  |         6 |
 04  |         5 |
 03  |         4 |
(3 rows)

test=*# update pauline set summe=(select sum(insgesamt) from pauline) ;
UPDATE 3
test=*# select * from pauline ;
 plz | insgesamt | summe
-----+-----------+-------
 06  |         6 |    15
 04  |         5 |    15
 03  |         4 |    15
(3 rows)

Aus den Daten berechenbare Werte in der Tabelle zu speichern ist selten eine gute Idee.

Andreas
 

pauline1

Benutzer
Beiträge
14
sorry, habe ich was vergessen zu sagen. Die Tabelle sieht so aus im Original:
plz insgesamt summe
04 6 15
04 5 15
04 4 15
05 1 3
05 2 3

Deswegen ich probiere so:

update pauline
set summe=(select sum(insgesamt) where plz='04')

und das funktioniert leider nicht.

Könntest Du mir hier helfen???

Pauline
 

akretschmer

Datenbank-Guru
Beiträge
9.028
Könntest Du mir hier helfen???

Pauline

Code:
test=*# select * from pauline ;
 plz | insgesamt | summe
-----+-----------+-------
 04  |         6 |     0
 04  |         5 |     0
 04  |         4 |     0
 05  |         1 |     0
 05  |         2 |     0
(5 rows)

test=*# update pauline set summe = foo.sum from (select plz, sum(insgesamt) from pauline group by plz) foo where pauline.plz=foo.plz;
UPDATE 5
test=*# select * from pauline ;
 plz | insgesamt | summe
-----+-----------+-------
 04  |         6 |    15
 04  |         5 |    15
 04  |         4 |    15
 05  |         1 |     3
 05  |         2 |     3
(5 rows)

Andreas
 

pauline1

Benutzer
Beiträge
14
Guten Morgen,

exakt das wollte ich hinbekommen, leider bekomme ich ein fehler:

"Fehler in der SQL-Syntax. Bitte die korrekte Syntax im Handbuch nachschlagen bei 'from
(select plz, sum(insgesamt) from Be group by plz) where Be' in Zeile 2"

und meine abfrage sieht so aus:
UPDATE Bev
SET summe= foo.sum FROM
(SELECT plz, SUM(insgesamt) FROM Bev GROUP BY plz) foo WHERE Bev.plz=foo.plz

wo kann das liegen?

Danke!
 

akretschmer

Datenbank-Guru
Beiträge
9.028
Guten Morgen,

exakt das wollte ich hinbekommen, leider bekomme ich ein fehler:

"Fehler in der SQL-Syntax. Bitte die korrekte Syntax im Handbuch nachschlagen bei 'from
(select plz, sum(insgesamt) from Be group by plz) where Be' in Zeile 2"

wo kann das liegen?

Danke!

Moin,

habs grad mal mit MySQL 5.1 probiert: geht in der Tat nicht. Toll. MySQL eben. Weil Du es bist:

Code:
mysql> select * from pauline;
+------+------+-------+
| plz  | i    | summe |
+------+------+-------+
| 04   |    6 |     0 |
| 04   |    5 |     0 |
| 04   |    4 |     0 |
| 05   |    1 |     0 |
| 05   |    2 |     0 |
+------+------+-------+
5 rows in set (0.00 sec)

mysql> update pauline t1 join (select plz, sum(i) as summe from pauline group by plz) t2 on t1.plz=t2.plz set t1.summe=t2.summe;
Query OK, 5 rows affected (0.01 sec)
Rows matched: 5  Changed: 5  Warnings: 0

mysql> select * from pauline;
+------+------+-------+
| plz  | i    | summe |
+------+------+-------+
| 04   |    6 |    15 |
| 04   |    5 |    15 |
| 04   |    4 |    15 |
| 05   |    1 |     3 |
| 05   |    2 |     3 |
+------+------+-------+
5 rows in set (0.01 sec)


Andreas
 

pauline1

Benutzer
Beiträge
14
Darf ich noch eine Frage stellen?

ich wollte jetzt von meine schöne Tabelle abfragen PLZ und summe aufsteigend. also damit das im Enddefeht so aussieht:

plz summe
05 3
04 15

und habe ich so versucht:

select plz, summe
from pauline
group by plz
order by summe desc

aber bekomme ich
group by plz- richtig, aber summe ist gemischt, also sowohl nicht aufsteigend, als auch nicht abgsteigend (ich habe mehrere plz natürlich)

könntest du mir hier ein Tip geben?

p.s. ich sehe, das sortiert mir ganz falsch:
z.B. wenn ich abfrage mache select summe
from pauline
order by summe desc


bekomme ich (andere zhalen, aber das spielt keine rolle)
summe
998
9930
9873
981
971

Das hat sich nach absteigend sortiert, aber wie du siehst, nicht reel- vergleich erste zwei zahlen von ganze zahl usw.
Ist die Spalte in der Tabelle falsch formatiert. Sie ist bei mir als varchar?
 

akretschmer

Datenbank-Guru
Beiträge
9.028
Darf ich noch eine Frage stellen?

ich wollte jetzt von meine schöne Tabelle abfragen PLZ und summe aufsteigend. also damit das im Enddefeht so aussieht:

plz summe
05 3
04 15

und habe ich so versucht:

select plz, summe
from pauline
group by plz
order by summe desc

aber bekomme ich
group by plz- richtig, aber summe ist gemischt, also sowohl nicht aufsteigend, als auch nicht abgsteigend (ich habe mehrere plz natürlich)

könntest du mir hier ein Tip geben?


Suchst Du sowas:
(Deine beschreibung ist etwas wirr...)

Code:
mysql> select * from pauline;
+------+------+-------+
| plz  | i    | summe |
+------+------+-------+
| 04   |    6 |    15 |
| 04   |    5 |    15 |
| 04   |    4 |    15 |
| 05   |    1 |     3 |
| 05   |    2 |     3 |
+------+------+-------+
5 rows in set (0.00 sec)

mysql> select distinct plz, summe from pauline order by summe asc;
+------+-------+
| plz  | summe |
+------+-------+
| 05   |     3 |
| 04   |    15 |
+------+-------+
2 rows in set (0.00 sec)
 

pauline1

Benutzer
Beiträge
14
Leider es funktioniert bei dieser besipiel, aber bei meine reelen zahlen nicht. wie gesaggt, bekomm ich:
plz summe
05 998
03 9930
01 9873
04 981
02 971

das order by mach: 998, dann kommt 9930, weil ist zweite zahl aus ganze zahl verglichen, dann kommt alles mit 98.., 97.., siehst du das?
 

akretschmer

Datenbank-Guru
Beiträge
9.028
Leider es funktioniert bei dieser besipiel, aber bei meine reelen zahlen nicht. wie gesaggt, bekomm ich:
plz summe
05 998
03 9930
01 9873
04 981
02 971

das order by mach: 998, dann kommt 9930, weil ist zweite zahl aus ganze zahl verglichen, dann kommt alles mit 98.., 97.., siehst du das?

Du läßt auch keinen Fehler aus, den man machen kann, gell? Warum verwendest Du für Zahlen keine passenden Datentypen, sondern Text-Typen?

So wäre es richtig:

Code:
test=*# select * from x;
  s
------
  998
 9930
 9873
  981
  971
(5 rows)

test=*# select * from x order by s desc;
  s
------
 9930
 9873
  998
  981
  971
(5 rows)

Der Datentyp ist:

Code:
test=*# \d x
       Table "public.x"
 Column |  Type   | Modifiers
--------+---------+-----------
 s      | integer |


Jetzt mache ich es mal falsch, ich CASTe den Datentyp nach TEXT und sortiere dann:

Code:
test=*# select * from x order by s::text desc;
  s
------
  998
 9930
 9873
  981
  971
(5 rows)


Also, merke Dir für die Zukunft: immer passende Datentypen verwenden!

Also Notbehelf für heute:

Code:
mysql> select * from x order by s desc;
+------+
| s    |
+------+
| 998  |
| 9930 |
| 971  |
+------+
3 rows in set (0.00 sec)

mysql> select * from x order by cast(s as signed);
+------+
| s    |
+------+
| 971  |
| 998  |
| 9930 |
+------+
3 rows in set (0.00 sec)
 
Werbung:

pauline1

Benutzer
Beiträge
14
Du läßt auch keinen Fehler aus, den man machen kann, gell? Warum verwendest Du für Zahlen keine passenden Datentypen, sondern Text-Typen?


Der Datentyp ist:

Code:
test=*# \d x
      Table "public.x"
Column |  Type  | Modifiers
--------+---------+-----------
s      | integer |


Jetzt mache ich es mal falsch, ich CASTe den Datentyp nach TEXT und sortiere dann:

Code:
test=*# select * from x order by s::text desc;
  s
------
  998
9930
9873
  981
  971
(5 rows)


Also, merke Dir für die Zukunft: immer passende Datentypen verwenden!


[/code]

Der datentyp war falsch, wie ich behauptet habe, aber wusste ich nicht, was ich als datetyp definieren soll.
Vielen lieben Dank für deine Hilfe!!!

Es funktioniert alles einwandfrei,
vG
Pauline

P.S. Ich bin kein MySQL Expert, Fortgeschrietenne ... nur Anfänger, der so was in der Arbeit an der Seite nur macht.
Aber es ist sehr schön die Hilfe und die Lösung zu bekommen.
der Tag fängt anders an!!!
 
Oben