Jo: order by

Hallo zusammen!

Folgende MYSQL-Anweisung liefert mir für jeden Namen die Anzahl der Beiträge.

SELECT name,COUNT(name) FROM tabelle GROUP by name ORDER BY name

Ich würde nur gerne das ganze nach der Anzahl geordnet haben. "ORDER BY COUNT(name)" bringt eine Fehlermeldung.

Kann man das direkt im MySQL-Ausdruck ordnen oder muss ich das Ergebnis in PHP sortieren?

Grüße und schon mal Danke1

Jo

  1. Hi,

    Kann man das direkt im MySQL-Ausdruck ordnen oder muss ich das Ergebnis in PHP sortieren?

    Du kannst entweder ORDER BY COUNT(name) oder vielleicht auch COUNT( name ) (mit den backticks) schreiben oder (schöner) das Ergebnis umbenennen, z.B. so:

      
    SELECT name,COUNT(name) anzahl FROM tabelle GROUP by name ORDER BY anzahl  
    
    

    Der Yeti

    --
    Habe nun, ach! WInfo, BWL, und Mathe, Und leider auch Info!
    Durchaus studiert, mit heißem Bemühn. Da steh' ich nun, ich armer Thor!
    Und bin so klug als wie zuvor!
    sh:( fo:| ch:? rl:? br:< n4:& ie:( mo:| va:| de:[ zu:) fl:| ss:) ls:< js:|
    1. Danke Yeti!

      Funktioniert wunderbar!

      Und die Lösung kommt schneller als ich die Frage tippem kann :-)

      Grüßle

    2. Hallo Yeti,

      Du kannst entweder ORDER BY COUNT(name) oder vielleicht auch COUNT( name ) (mit den backticks) schreiben

      nein, kann er nicht. Wenn du "ORDER BY COUNT(name)" verwendest, sucht MySql zum Sortieren nach einer Spalte namens "COUNT(name)" die natürlich nicht gefunden wird.

      Grüße aus Nürnberg
      Tobias

      1. Hi,

        Du kannst entweder ORDER BY COUNT(name) oder vielleicht auch COUNT( name ) (mit den backticks) schreiben
        nein, kann er nicht. Wenn du "ORDER BY COUNT(name)" verwendest, sucht MySql zum Sortieren nach einer Spalte namens "COUNT(name)" die natürlich nicht gefunden wird.

        Ist das deine Hypothese oder hast du sie auch irgendwie überprüft? Also bei mir klappt es wunderbar (JPEG, 54,3 KB).
        Warum sollte sie auch nicht gefunden werden? Schließlich heißt die Ergebnisspalte doch genau so wie das Sortierungskriterium. Das bedeutet zwar, dass der SQL-Server das Sortieren nach dem Gruppieren und Zählen ausführen muss, aber ein durchschnittlich fitter Optimierer sollte das ohne Probleme schaffen. MySQL kann es jedenfalls.

        Der Yeti

        --
        Habe nun, ach! WInfo, BWL, und Mathe, Und leider auch Info!
        Durchaus studiert, mit heißem Bemühn. Da steh' ich nun, ich armer Thor!
        Und bin so klug als wie zuvor!
        sh:( fo:| ch:? rl:? br:< n4:& ie:( mo:| va:| de:[ zu:) fl:| ss:) ls:< js:|
        1. Hallo Yeti,

          nein, kann er nicht. Wenn du "ORDER BY COUNT(name)" verwendest, sucht MySql zum Sortieren nach einer Spalte namens "COUNT(name)" die natürlich nicht gefunden wird.
          Ist das deine Hypothese oder hast du sie auch irgendwie überprüft?

          ja, habe ich.

          Also bei mir klappt es wunderbar (JPEG, 54,3 KB).

          Welche MySql-Version hast du denn? Bei mir (4.0.24) gibt der gleiche Query nur die Meldung "Unknown column 'COUNT(*)' in 'order clause'" ...

          Grüße aus Nürnberg
          Tobias

          1. Hi,

            Also bei mir klappt es wunderbar (JPEG, 54,3 KB).
            Welche MySql-Version hast du denn? Bei mir (4.0.24) gibt der gleiche Query nur die Meldung "Unknown column 'COUNT(*)' in 'order clause'" ...

            Ich habe MySQL 4.1.10, kann aber keine Aussage über frühere Versionen treffen und die MySQL-Doku sagt auch nix darüber aus. Vielleicht liegt es auch einfach nur daran, dass du keine Leerzeichen verwendet hast, dann kommt der Fehler nämlich bei mir auch. COUNT( \* ) dagegen funktioniert (er wandelt das obere COUNT wohl intern um).

            Der Yeti

            --
            Habe nun, ach! WInfo, BWL, und Mathe, Und leider auch Info!
            Durchaus studiert, mit heißem Bemühn. Da steh' ich nun, ich armer Thor!
            Und bin so klug als wie zuvor!
            sh:( fo:| ch:? rl:? br:< n4:& ie:( mo:| va:| de:[ zu:) fl:| ss:) ls:< js:|
            1. Hallo Yeti,

              Vielleicht liegt es auch einfach nur daran, dass du keine Leerzeichen verwendet hast, dann kommt der Fehler nämlich bei mir auch. COUNT( \* ) dagegen funktioniert (er wandelt das obere COUNT wohl intern um).

              ja, daran lag es - wenn ich noch Leerzeichen reinmache funktioniert es ...

              Grüße aus Nürnberg
              Tobias