Josef: Gemeinden nach Einwohnerzahlen zählen

Ich habe in meiner Tabelle alle Orte und Gemeinden von Deutschalnd mit der jeweiligen Einwohnerzahl.
Nun will ich gerne ermitteln wie viele Städte es gibt bis

5.000 Einwohner
10.000 Einwohner
25.000 Einwohner
50.000 Einwohner
100.000 Einwohner

Meine Tabelle ganz einfach aufgebaut:

id ! gemeinde ! einwohnerzahl

Es wäre toll wenn ich ein wenige Unterstützung von den Datenbankfachleuten bekommen könnte!

  1. Moin,

    Es wäre toll wenn ich ein wenige Unterstützung von den Datenbankfachleuten bekommen könnte!

    Du brauchst erstmal die Grundlagen.
    Die Abfrage ist ganz einfach:
    Du möchtest die SUMME aller GEMEINDEN aus der TABELLE die WENIGER ALS 5000 EINWOHNER haben.

    Übersetzt bedeutet das:
    SELECT COUNT(gemeinde) FROM tabelle WHERE einwohnerzahl < 5000

    Grüße Marco

    1. SELECT COUNT(gemeinde) FROM tabelle WHERE einwohnerzahl < 5000

      Ja das verstehe ich, doch nun habe ich nur die Daten für unter 5000,

      so müsste ich ja zig mal die gleiche Abfrage stellen!

      SELECT COUNT(gemeinde) FROM tabelle WHERE einwohnerzahl < 5000
      SELECT COUNT(gemeinde) FROM tabelle WHERE einwohnerzahl > 5001 AND einwohnerzahl < 10000
      etc.

      1. Moin,

        so müsste ich ja zig mal die gleiche Abfrage stellen!

        Richtig. Was hast du denn gedacht, wie das gemacht wird? Du kannst auch die komplette Tabelle abfragen und in ein PHP-Array schmeißen. Einige Sachen gehen da vielleicht noch einfacher, aber dazu müsste man wissen, was du willst.

        Grüße Marco

        1. moin,

          Was hast du denn gedacht, wie das gemacht wird?

          mit einer Fallunterscheidung innerhalb der abfrage (CASE wird von fast allen DBMS unterstützt) und ohne PHP-Array.

          Ilja

          1. Moin,

            mit einer Fallunterscheidung innerhalb der abfrage (CASE wird von fast allen DBMS unterstützt) und ohne PHP-Array.

            Wie genau meinst du das?

            Grüße Marco

            1. moin,

              Wie genau meinst du das?

              ich bin mal faul und impliziere ein wenig....

              SELECT CASE
                           WHEN t.einwohnerzahl <= 5000 THEN '5T Einwohner'
                           WHEN t.einwohnerzahl <= 10000 THEN '10T Einwohner'
                           WHEN t.einwohnerzahl <= 25000 THEN '25T Einwohner'
                           WHEN t.einwohnerzahl <= 50000 THEN '50T Einwohner'
                           WHEN t.einwohnerzahl <= 100000 THEN '100T Einwohner'
                       END, COUNT(*) Anzahl
              FROM tabelle t
              WHERE t.einwohnerzahl <= 100000
              GROUP BY CASE
                           WHEN t.einwohnerzahl <= 5000 THEN '5T Einwohner'
                           WHEN t.einwohnerzahl <= 10000 THEN '10T Einwohner'
                           WHEN t.einwohnerzahl <= 25000 THEN '25T Einwohner'
                           WHEN t.einwohnerzahl <= 50000 THEN '50T Einwohner'
                           WHEN t.einwohnerzahl <= 100000 THEN '100T Einwohner'
                       END
              ;

              Ilja

              1. Hi!

                SELECT CASE
                             WHEN t.einwohnerzahl <= 5000 THEN '5T Einwohner' [...]
                         END, COUNT(*) Anzahl
                FROM tabelle t
                WHERE t.einwohnerzahl <= 100000
                GROUP BY CASE
                             WHEN t.einwohnerzahl <= 5000 THEN '5T Einwohner' [...]
                         END

                Im Falle von MySQL kann sich das GROUP BY auch einen Alias aus der SELECT-Klausel beziehen, dann muss man den CASE nicht zweimal schreiben.

                Lo!

                1. moin,

                  Im Falle von MySQL kann sich das GROUP BY auch einen Alias aus der SELECT-Klausel beziehen, dann muss man den CASE nicht zweimal schreiben.

                  jup, aber eine alte Oracler gewohntheit....

                  Ilja

              2. Moin,

                ich bin mal faul und impliziere ein wenig....
                [...]

                So kannte ich das gar nicht. Man lernt eben nie aus :)

                Grüße Marco

      2. versuchs mal mit:

        SELECT COUNT(gemeinde) FROM tabelle GROUP BY einwohnerzahl

        SELECT COUNT(gemeinde) FROM tabelle WHERE einwohnerzahl < 5000

        Ja das verstehe ich, doch nun habe ich nur die Daten für unter 5000,

        1. Moin,

          versuchs mal mit:

          SELECT COUNT(gemeinde) FROM tabelle GROUP BY einwohnerzahl

          Dann hat man allerdings wahrscheinlich fast genauso viele Gruppen, wie Gemeinden, oder irre ich mich da?

          Grüße Marco

      3. Tach! Post!

        Das Handbuch sagt:

        "UNION wird verwendet, um das Ergebnis einer Anzahl von SELECT-Anweisungen zu einer Ergebnismenge zusammenzufassen."

        Code-Schnipsel:

        SELECT COUNT(gemeinde) AS Anzahl Gemeinden, '1-5000' AS Einwohner FROM tabelle WHERE einwohnerzahl <= 5000
        UNION
        SELECT COUNT('gemeinde') AS Anzahl Gemeinden, '5001-10000' AS Einwohner FROM tabelle WHERE einwohnerzahl > 5000 AND einwohnerzahl <= 10000

        etc

        2 Fragen und eigentlich die gleiche Antwort ...

        Fred