Information ausblenden
Willkommen im Forum für alle Datenbanken! Registriere Dich kostenlos und diskutiere über DBs wie Mysql, MariaDB, Oracle, Sql-Server, Postgres, Access uvm

MySQL Summe in eine Spalte bilden

Dieses Thema im Forum "MySQL und MariaDB" wurde erstellt von pauline1, 19 März 2013.

  1. pauline1

    pauline1 Benutzer

    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
     
  2. akretschmer

    akretschmer Datenbank-Guru

    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
     
  3. pauline1

    pauline1 Benutzer

    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
     
  4. akretschmer

    akretschmer Datenbank-Guru

    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
     
  5. pauline1

    pauline1 Benutzer

    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!
     
  6. akretschmer

    akretschmer Datenbank-Guru

    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 gefällt das.
  7. pauline1

    pauline1 Benutzer

    Vielen Dank!!!
    es hat geklaptt!

    Einen schönen Tag wünscht

    Pauline
     
  8. pauline1

    pauline1 Benutzer

    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?
     
  9. akretschmer

    akretschmer Datenbank-Guru


    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)
    
     
  10. pauline1

    pauline1 Benutzer

    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?
     
  11. akretschmer

    akretschmer Datenbank-Guru

    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)
    
     
    pauline1 gefällt das.
  12. pauline1

    pauline1 Benutzer

    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!!!
     
Die Seite wird geladen...

Diese Seite empfehlen

  1. Diese Seite verwendet Cookies. Wenn du dich weiterhin auf dieser Seite aufhältst, akzeptierst du unseren Einsatz von Cookies.
    Information ausblenden