Sql Subquery ?

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • Sql Subquery ?

    Hallo,
    ich habe eine Tabelle mit folgenden Aufbau

    PHP-Code:
    id     name     population     land     bundesland     regierungsbezirk     landkreis     zip     lon     lat     kfz     area
    1     Dresden     480228     Deutschland     Sachsen     Dresden     Kreisfreie Stadt Dresden     01067     13.733658     51.050957     DD     328
    2     Dresden     480228     Deutschland     Sachsen     Dresden     Kreisfreie Stadt Dresden     01069     13.733658     51.050957 
    Jetzt möchte ich für das Bundesland Sachsen die Spalte population summieren, aber irgendwie krieg ich es leider nicht hin.

    Bis jetzt habe ich

    PHP-Code:
    SELECT DISTINCT bundeslandpopulationarea
    FROM city
    GROUP BY landkreis
    HAVING bundesland 
    'Sachsen' 
    die mir schon mal alle Landkreise mit der Bevölkerungszahl anzeigt.
    PHP-Code:
    Sachsen      252618      Kreisfreie Stadt Chemnitz
    Sachsen     480228        Kreisfreie Stadt Dresden 
    Wie kann ich aus dieser Abfrage jetzt noch einen Einzeiler machen in der dann steht

    Sachsen | Summe der Einwohner

    Würde mich über Hilfe sehr freuen, da ich es nicht mehr blicke ;-)

    Gruß Thomas
    Spambot Falle
    Wem das Wasser bis zum Hals steht, sollte nicht den Kopf hängen lassen.

  • #2
    SUM()

    Kommentar


    • #3
      Ne leider nicht:

      PHP-Code:
      SELECT distinct bundesland,  populationarealandkreis
                      FROM city
      group by landkreis
      having bundesland 
      'Berlin'
                      
      ORDER BY landkreis 
      bringt:
      PHP-Code:
      bundesland     population     area     landkreis
      Berlin         3392425     892     Kreisfreie Stadt Berlin 
      und

      PHP-Code:
      SELECT distinct bundeslandsum(population), arealandkreis
                      FROM city
      group by landkreis
      having bundesland 
      'Berlin'
                      
      ORDER BY landkreis 
      bringt leider
      PHP-Code:
      bundesland     sumpopulation )     area     landkreis
      Berlin         647953175     892     Kreisfreie Stadt Berlin 
      weil ich insgesamt 191 Sätze in der Tabelle City habe die sich in der PLZ unterscheiden, die aber alle in Population 3 Mio drin stehen haben....

      PHP-Code:
      2512      Berlin      3392425      Deutschland      Berlin      -      Kreisfreie Stadt Berlin      10115      13.411494      52.523480      B      892
      2513     Berlin     3392425     Deutschland     Berlin     
      -     Kreisfreie Stadt Berlin     10117     13.411494     52.523480     B     892
      2514     Berlin     3392425     Deutschland     Berlin     
      -     Kreisfreie Stadt Berlin     10119     13.411494     52.523480     B     892
      2515     Berlin     3392425     Deutschland     Berlin     
      -     Kreisfreie Stadt Berlin     10178     13.411494     52.523480     B     892
      2516     Berlin     3392425     Deutschland     Berlin     
      -     Kreisfreie Stadt Berlin     10179     13.411494     52.523480     B     892
      2517     Berlin     3392425     Deutschland     Berlin     
      -     Kreisfreie Stadt Berlin     10243     13.411494     52.523480     B     892 
      Spambot Falle
      Wem das Wasser bis zum Hals steht, sollte nicht den Kopf hängen lassen.

      Kommentar


      • #4


        GROUP BY

        Kommentar


        • #5
          wie meinst du das mit group by ? Sorry das ich so dumm nachfragen muss.

          SELECT distinct sum(population)
          FROM city
          group by population,bundesland
          having bundesland = 'Berlin'

          gibt ja immer noch
          sum( population ) bundesland
          647953175 Berlin

          aus.
          Also Sum summiert die 191 Zeilen zusammen und group by macht daraus nur eine Zeile ?

          Was ich möchte:

          Ich nehme noch mal Sachsen als Beispiel her

          also Dresden hat zig PLZ Nummern und in jedem dieser Datensätze steht 480228 Einwohner
          Dann gibt es noch in Sachsen noch Chemnitz mit 252618

          Er rechnet nur nach obiger SQL aber

          Dresden 480228 x 20 PLZ Nummern + Chemnitz 252618 x 10 PLZ
          Spambot Falle
          Wem das Wasser bis zum Hals steht, sollte nicht den Kopf hängen lassen.

          Kommentar


          • #6
            Dann normalisiere halt die Tabelle mal vernünftig - da stehen die Daten ja X-fach drin aktuell x_X (Stichwort Redundanz)

            Ein netter Guide zum übersichtlichen Schreiben von PHP/MySQL-Code!

            bei Klammersetzung bevorzuge ich jedoch die JavaCoding-Standards
            Wie man Fragen richtig stellt

            Kommentar


            • #7
              Ich hab da leider keinen Einfluß auf das DB Design und zusätzlich hab ich auch keine Möglichkeit das per PHP zu lösen.
              Spambot Falle
              Wem das Wasser bis zum Hals steht, sollte nicht den Kopf hängen lassen.

              Kommentar


              • #8
                Original geschrieben von JR-EWING
                Ich hab da leider keinen Einfluß auf das DB Design und zusätzlich hab ich auch keine Möglichkeit das per PHP zu lösen.
                Tja, dann hast du die A-Karte~

                Code:
                SELECT bundesland, SUM(population) FROM (
                 SELECT DISTINCT bundesland, population, area
                 FROM city
                 WHERE bundesland = "Sachsen"
                 GROUP BY landkreis
                ) GROUP BY bundesland
                Sollte so dann gehen, aber auf die Performance gehe ich mal nicht ein...

                btw. Wieso war das bundesland = "Sachsen" in einer HAVING-Klausel? Das macht keinen Sinn und ist wohl eher kontraproduktiv~

                Ein netter Guide zum übersichtlichen Schreiben von PHP/MySQL-Code!

                bei Klammersetzung bevorzuge ich jedoch die JavaCoding-Standards
                Wie man Fragen richtig stellt

                Kommentar


                • #9
                  Vielen Dank Ghostgambler ;-)

                  das hat mir schon mal sehr weitergeholfen und wieder was gelernt.
                  Wußte nicht das ich in der FROM Klausel auch ein SQL Statement einbauen kann. Performance ist da nicht das Problem weil ich schon gesagt habe, dass das nicht sauber so ist. Außerdem sehe ich auch das deren Datenbasis nicht ganz aktuell ist ;-)

                  Also Danke nochmal an die Helfer !!!!
                  Spambot Falle
                  Wem das Wasser bis zum Hals steht, sollte nicht den Kopf hängen lassen.

                  Kommentar


                  • #10
                    Original geschrieben von ghostgambler
                    Tja, dann hast du die A-Karte~

                    Code:
                    SELECT bundesland, SUM(population) FROM (
                     SELECT DISTINCT bundesland, population, area
                     FROM city
                     WHERE bundesland = "Sachsen"
                     GROUP BY landkreis
                    ) GROUP BY bundesland
                    Sollte so dann gehen, aber auf die Performance gehe ich mal nicht ein...
                    Geht's noch blöder?

                    Code:
                    SELECT bundesland, SUM(population)
                    FROM city
                    WHERE bundesland = 'Sachsen'
                    GROUP BY bundesland
                    Reicht doch wohl auch ... !
                    carpe noctem

                    [color=blue]Bitte keine Fragen per EMail ... im Forum haben alle was davon ... und ich beantworte EMail-Fragen von Foren-Mitgliedern in der Regel eh nicht![/color]
                    [color=red]Hinweis: Ich bin weder Mitglied noch Angestellter von ebiz-consult! Alles was ich hier von mir gebe tue ich in eigener Verantwortung![/color]

                    Kommentar


                    • #11
                      @Goth

                      Danke, aber ghostgambler hat Recht. Habe es schon weiter oben geschrieben ich habe leider eine unnormaliserte Datenbasis

                      also Dresden hat zig PLZ Nummern und in jedem dieser Datensätze steht 480228 Einwohner
                      Dann gibt es noch in Sachsen noch Chemnitz mit 252618

                      Da rechnet dein obiger SQL aber

                      Dresden 480228 x 20 PLZ Nummern + Chemnitz 252618 x 10 PLZ
                      Spambot Falle
                      Wem das Wasser bis zum Hals steht, sollte nicht den Kopf hängen lassen.

                      Kommentar


                      • #12
                        Dann grenzt man's mit 'nem Subquery ein ... !
                        carpe noctem

                        [color=blue]Bitte keine Fragen per EMail ... im Forum haben alle was davon ... und ich beantworte EMail-Fragen von Foren-Mitgliedern in der Regel eh nicht![/color]
                        [color=red]Hinweis: Ich bin weder Mitglied noch Angestellter von ebiz-consult! Alles was ich hier von mir gebe tue ich in eigener Verantwortung![/color]

                        Kommentar

                        Lädt...
                        X