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

Datensätze zählen und sortieren

Dieses Thema im Forum "MySQL und MariaDB" wurde erstellt von Andreas B., 18 Januar 2015.

  1. Andreas B.

    Andreas B. Benutzer

    Hallo Mysql-Experten,
    als blutiger Anfänger verzweifle ich an einer praktisch ganz einfachen Sache.

    Ich habe eine Tabelle mit diversen Daten sowie Orten und Ländern, die so aussieht:

    ... Hamburg Deutschland
    ... Hamburg Deutschland
    ... Hamburg Deutschland
    ... München Deutschland

    ... New York USA
    ... New York USA
    ... New York USA

    ... Moskau Russland
    ... Moskau Russland

    Nun möchte ich gern diejenigen Länder ausgeben, in denen mindestens 3 Städte enthalten sind, Endergebnis also so:
    - Deutschland
    - USA

    Ich probiere schon stundenlang mit Group by, Distinct etc. herum, aber komme auf keinen grünen Zweig.
    Für Experten ist das wohl eine ganz einfache Sache. Wer kann mir helfen?

    Vielen Dank im voraus!!!
    Andreas
     
  2. akretschmer

    akretschmer Datenbank-Guru

    kein Ahnung, ob MySQL das kann...

    Code:
    test=*# select * from andi_b ;
      stadt  |  land
    ----------+-------------
     hamburg  | deutschland
     hamburg  | deutschland
     berlin  | deutschland
     dresden  | deutschland
     new york | usa
     boston  | usa
     boston  | usa
    (7 rows)
    
    Time: 0,352 ms
    test=*# select land, count(distinct stadt) from andi_b group by land having count(distinct stadt) > 2;
      land  | count
    -------------+-------
     deutschland |  3
    (1 row)
    
     
  3. akretschmer

    akretschmer Datenbank-Guru

    Ach so, ich zähle nur unterschiedliche Städte. Wenn auchgleiche gezählt werden sollen, dann ohne DISTINCT.
     
  4. Andreas B.

    Andreas B. Benutzer

    Wahnsinn, klappt auf Anhieb. Tausend Dank!!!!!!!!!!!!!!!! :)
     
  5. akretschmer

    akretschmer Datenbank-Guru

    Ein seltener Fall, daß eine Lösung ohne Probleme in MySQL geht ...
     
  6. Andreas B.

    Andreas B. Benutzer

    Hallo Andreas,
    leider habe ich mich zu früh gefreut, es klappt doch nicht so wie ich dachte. Ich habe mich aber wahrscheinlich auch nicht ganz klar ausgedrückt.
    Es werden jetzt alle Länder ausgeschmissen, die mehr als 3 unterschiedliche Städte beinhalten. Bei Belgien z.B. habe ich 10 VERSCHIEDENE Städte, und Belgien wird angezeigt. Ich möchte aber, dass das Land nur angezeigt wird, wenn von der GLEICHEN Stadt mehr als 3 Einträge existieren. Ich hatte DISTINCT auch mal weggenommen, aber gleiches Ergebnis.
    Könntest du mir noch mal helfen?

    Vielen Dank im voraus!!!
     
  7. Distrilec

    Distrilec Datenbank-Guru

    Code:
    select land, stadt, count(stadt) from andi_b group by land, stadt having count(stadt) > 2;
    Sollte den Trick tun :)
     
  8. Andreas B.

    Andreas B. Benutzer

    Klappt schon fast ;-) Allerdings wird jetzt ein und das selbe Land mehrfach aufgelistet...
     
  9. Distrilec

    Distrilec Datenbank-Guru

    Code:
    select distinct land from (select land, stadt, count(stadt) from andi_b group by land, stadt having count(stadt) > 2)
    Wäre wohl der einfachste weg.... ^^
     
  10. Andreas B.

    Andreas B. Benutzer

    Kommt diese Fehlermeldung bei raus: "Warning: mysql_fetch_array() expects parameter 1 to be resource, boolean given..."
     
  11. Distrilec

    Distrilec Datenbank-Guru

    Ja... Ich vergaß... MySQL kann keine Group -Clause im Subselect...
     
  12. Andreas B.

    Andreas B. Benutzer

    Ohh, so ein Mist. Hast du noch eine andere Idee?
     
  13. akretschmer

    akretschmer Datenbank-Guru

    Zeig mal, was bei der gezeigten Tabelle rauskommen soll. Ich hab den Faden verloren...
     
  14. Andreas B.

    Andreas B. Benutzer

    Bei deinem vorletzten Code ohne Fehlermeldung sah es so aus:
    Argentinien
    Australien
    Australien
    Deutschland
    Deutschland
    Deutschland
    Deutschland
    Deutschland
    Deutschland
    Deutschland
    Deutschland
    Deutschland
    Deutschland
    Deutschland
    Frankreich
    Frankreich
    Großbritannien
    Großbritannien
    Großbritannien
    Großbritannien
    Irland
    Italien
    Kanada
    Österreich
    Schweden
    Spanien
    Ungarn
    USA
    USA
    USA
    USA
    USA
    USA
    USA
    USA

    Edit:
    Und es soll so aussehen:
    Argentinien
    Australien
    Deutschland
    Frankreich
    Großbritannien
    Irland
    Italien
    Kanada
    Österreich
    Schweden
    Spanien
    Ungarn
    USA

     
  15. akretschmer

    akretschmer Datenbank-Guru


    Das kann unmöglich mit den Daten meiner Tabelle so funktionieren. Ich denke, Du suchst DISTINCT, evtl. DISTINCT ON(...), was MySQL aber nicht kann. Du könntest das vermutlich über JOIN's hinbekommen - oder über einen Wechsel zu PostgreSQL.
     
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