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

Mehrere Durchschnitte in einer Tabelle ausgeben

Dieses Thema im Forum "Oracle" wurde erstellt von Jolies, 27 Januar 2013.

  1. Jolies

    Jolies Neuer Benutzer

    Hallo zusammen. =)
    Ich bin noch relativ neu und unerfahren was SQL angeht und ich habe ein paar Aufgaben, bei denen ich einfach nicht weiterkomme. Es geht darum, dass ich eine Tabelle habe in der mehrere Personen, deren Stadt, Bundesstaat und Land aufgelistet sind. Ich soll jetzt die Anzahl der Bewohner und ihr durchschnittliches Einkommen pro Stadt, Bundesland und des gesamten Landes in einer Tabelle ausgeben. Der Teil mit "in einer Tabelle" macht mir schwierigkeiten..
    Nur nach Staat zB ist ja einfach:

    Code:
    SELECT e.Staat, AVG(e.Einkommen)AS Einkommen
    FROM Einwohner e
    GROUP BY e.Staat
    Aber wie gebe ich aus einer Tabelle mehrere Durchschnitte nach unterschiedlichen Spalten sortiert aus?
    Mir reicht es, wenn mir jemand den korrekten Befehl sagen könnte, ich kann danach selber im Internet suchen, wie der genutzt wird und wie ich eventuelle Nullstellen rauskürze usw, aber es fehlt mir einfach der Ansatz. =(
    Ich hoffe ich hab mich zumindest halbwegs klar ausgedrückt. ;)

    Allerliebste Grüße
    Jolies
     
  2. akretschmer

    akretschmer Datenbank-Guru


    Ich weiß, was Du suchst, und kann Dir auch sagen, wie es geht, aber das geht wahrscheinlich NICHT mit MySQL.

    Also, folgende Tabelle:

    Code:
    test=*# select * from einkommen ;
      stadt  |  bundesland  |    land    | einkommen
    -----------+----------------+-------------+-----------
    dresden  | sachsen        | deutschland |      3000
    meissen  | sachsen        | deutschland |      2800
    chemnitz  | sachsen        | deutschland |      2900
    erfurt    | thueringen    | deutschland |      3100
    paris    | paris          | frankreich  |      2600
    magdeburg | sachsen-anhalt | deutschland |      2900
    (6 rows)
    
    Was Du wohl suchst ist folgendes:

    Code:
    test=*# select stadt, bundesland, land, avg(einkommen) over (partition by land, bundesland,stadt) as per_stadt, avg(einkommen) over (partition by land, bundesland) as per_bundesland, avg(einkommen) over (partition by land) as per_land from einkommen;
      stadt  |  bundesland  |    land    |      per_stadt      |    per_bundesland    |      per_land
    -----------+----------------+-------------+-----------------------+-----------------------+-----------------------
    chemnitz  | sachsen        | deutschland | 2900.0000000000000000 | 2900.0000000000000000 | 2940.0000000000000000
    dresden  | sachsen        | deutschland | 3000.0000000000000000 | 2900.0000000000000000 | 2940.0000000000000000
    meissen  | sachsen        | deutschland | 2800.0000000000000000 | 2900.0000000000000000 | 2940.0000000000000000
    magdeburg | sachsen-anhalt | deutschland | 2900.0000000000000000 | 2900.0000000000000000 | 2940.0000000000000000
    erfurt    | thueringen    | deutschland | 3100.0000000000000000 | 3100.0000000000000000 | 2940.0000000000000000
    paris    | paris          | frankreich  | 2600.0000000000000000 | 2600.0000000000000000 | 2600.0000000000000000
    (6 rows)
    
    Das wird aber so wohl nicht mit MySQL gehen, das geht mit PostgreSQL (verwende ich), und wohl auch in Oracle und M$SQL, vielleicht auch Informix und anderen Systemen.

    Was Du machen kannst: das, was Du oben schon hast, das aber mehrfach je Kriterium und die Ausgaben via UNION ALL verketten. Denk ich mal, ungetestet...
     
  3. akretschmer

    akretschmer Datenbank-Guru


    Irknwie sowas vielleicht:

    Code:
    test=*# select stadt, bundesland, land, avg(einkommen) per_stadt,null::numeric as per_bundesland,null::numeric as per_land from einkommen group by 1,2,3,5,6 union all select null, bundesland, land, null, avg(einkommen) as per_stadt,null from einkommen group by 1,2,3 union all select '','',land, null,null,avg(einkommen) from einkommengroup by 1,2,3;
       stadt   |   bundesland   |    land     |       per_stadt       |    per_bundesland     |       per_land
    -----------+----------------+-------------+-----------------------+-----------------------+-----------------------
     meissen   | sachsen        | deutschland | 2800.0000000000000000 |                       |
     dresden   | sachsen        | deutschland | 3000.0000000000000000 |                       |
     erfurt    | thueringen     | deutschland | 3100.0000000000000000 |                       |
     chemnitz  | sachsen        | deutschland | 2900.0000000000000000 |                       |
     paris     | paris          | frankreich  | 2600.0000000000000000 |                       |
     magdeburg | sachsen-anhalt | deutschland | 2900.0000000000000000 |                       |
               | sachsen-anhalt | deutschland |                       | 2900.0000000000000000 |
               | sachsen        | deutschland |                       | 2900.0000000000000000 |
               | paris          | frankreich  |                       | 2600.0000000000000000 |
               | thueringen     | deutschland |                       | 3100.0000000000000000 |
               |                | frankreich  |                       |                       | 2600.0000000000000000
               |                | deutschland |                       |                       | 2940.0000000000000000
    (12 rows)
    
    Andreas
     
  4. Jolies

    Jolies Neuer Benutzer

    Hum, vielen Dank für die Antworten auf jeden Fall! Ich guck mal was ich zusammen bekomme und poste mein Ergebnis. =)
     
  5. Jolies

    Jolies Neuer Benutzer

    Mir ist auch gerade aufgefallen, dass ich am falschen Ort bin.. Ich wollte eigentlich zu Oracle.. Kann ein Mod den Thread bitte verschieben? Wie doof von mir. =\
     
  6. ukulele

    ukulele Datenbank-Guru

    Du kannst auch die selbe Tabele mehrmals mit sich selbst joinen, das sollte auch das gewünschte Ergebnis erzielen. Allerdings verstehe ich die Aufgabe noch nicht ganz: Willst du jetzt Anzahl der Personen pro Stadt, pro Bundesland und pro Land ausgeben oder was ist die Ausgangsinformation? Kannst du vieleicht mal Beispieldaten posten?
     
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