[MySQL 3.23.X] ORDER BY AVG(note)....

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

  • [MySQL 3.23.X] ORDER BY AVG(note)....

    Hi,

    wieder AVG.
    Mit den Sonderfunktionen habe ich bei MySQL nur Stress (keine Unterabfragen ... ).

    Ich will Members mit Key id aufsteigend nach Durchschnittsnoten per SQL auflisten. Nur die Anfrage bekomme ich nicht hin..
    ORDER BY AVG(note) funzt nicht, was eigentlich logisch ist.
    Problem: In der Abfrage habe ich vier JOIN Verbindungen.

    Fällt euch dazu was ein?

    Blaster
    Yuppi, endlich Elite ...

  • #2
    ORDER BY AVG(note)???
    Nach was willst du denn da sortieren?
    Nach dem Durchschnittswert einer Spalte? Man kann doch nur nach einer Spalte sortieren. Also ORDER BY note.
    it's not a bug,
    it's a feature!

    Kommentar


    • #3
      Du musst ( so mache ich das jedenfalls ) so sortieren:

      SELECT
      AVG(col1), col2
      FROM table
      WHERE Bedingung
      GROUP BY all_single_cols
      ORDER BY 1

      1 ist jetzt die stelle an der im select deine aggregationsfunktion avg steht
      evt hilft das
      Beantworte nie Threads mit mehr als 15 followups...
      Real programmers confuse Halloween and Christmas because OCT 31 = DEC 25

      Kommentar


      • #4
        Original geschrieben von MelloPie
        ...
        GROUP BY all_single_cols
        ORDER BY 1

        1 ist jetzt die stelle an der im select deine aggregationsfunktion avg steht
        evt hilft das
        Kannst Du diesen Teil näher ausführen, ich verstehe nicht ganz, was Du meinst ...
        Yuppi, endlich Elite ...

        Kommentar


        • #5
          na gruppieren nach allen single cols sollte klar sein
          und order by 1 zB bedeutet dass Du nach dem ersten Abfrageergebnis sortierst order by 2 nach dem 2. etc.
          Beantworte nie Threads mit mehr als 15 followups...
          Real programmers confuse Halloween and Christmas because OCT 31 = DEC 25

          Kommentar


          • #6
            @MelloPie:
            Vielen Dank soweit!

            Leider habe ich meinen Ziel noch nicht erreicht....

            Was mache ich bei Jokerzeichen '*':

            Ohne Note:
            SELECT * FROM corporation INNER JOIN personal ON corporation.id=personal.id INNER JOIN deko_bau ON personal.id=deko_bau.id INNER JOIN technik ON deko_bau.id=technik.id WHERE personal.H_Englisch='1' AND deko_bau.GDB_TV='1' AND technik.Lichttechnik='1'

            funzt optimal

            Mit Note:
            SELECT AVG(bewertung.note),* FROM corporation INNER JOIN personal ON corporation.id=personal.id INNER JOIN deko_bau ON personal.id=deko_bau.id INNER JOIN technik ON deko_bau.id=technik.id INNER JOIN bewertung ON corporation.id=bewertung.id WHERE personal.H_Englisch='1' AND deko_bau.GDB_TV='1' AND technik.Lichttechnik='1' GROUP BY bewertung.id ORDER BY 1

            You have an error in your SQL syntax near '* FROM corporation INNER JOIN personal ON corporation.id=personal.id INNER JOIN ' at line 1
            Yuppi, endlich Elite ...

            Kommentar


            • #7
              du schreibst GROUP BY bewertung.id ... aber hast mit sicherheit mehr single-fehler in der DB drin, als bewertung.id.

              und was hat MelloPie geschrieben? richtig. er hat all_single_cols geschrieben.

              also MUSST DU GROUP BY bewertung.id,bewertung.name,usw. schreiben.
              INFO: Erst suchen, dann posten![color=red] | [/color]MANUAL(s): PHP | MySQL | HTML/JS/CSS[color=red] | [/color]NICE: GNOME Do | TESTS: Gästebuch[color=red] | [/color]IM: Jabber.org |


              Kommentar


              • #8
                brauchst du wirklich alle spalten?

                geb einfach alle die du brauchst explizit an, du musst das ja nur einmal machen
                Ich denke, also bin ich. - Einige sind trotzdem...

                Kommentar


                • #9
                  @all:

                  Das ist ja der Clou und mein Problem :

                  Der gesamte String wird dynamisch erstellt, mit einen von mir entwickelten Analysetool mit dem der Kunde aus 25 Datentabellen und 450 Datenentitäten ohne SQL-Kenntnisse (dialogbasiert) mit eine Bedingungstiefe von 3 Joins und WhERE´s mit Klammersetzungen Datensätze auswerfen kann.

                  Soweit perfekt hingekriegt!

                  Nur wenn ich jetzt für die zusätzliche Benotung ein dynamisches Roll-Out der Cols beim GROUP BY durchführen muss, bin ich reif für die Klapse
                  Yuppi, endlich Elite ...

                  Kommentar


                  • #10
                    wie zeigst du die dinger denn an?

                    du arbeitest dann mit mysql_fetch_row oder?

                    frag doch vorher jede tabelle, was für spalten sie hat, oder geht das nicht?
                    Ich denke, also bin ich. - Einige sind trotzdem...

                    Kommentar


                    • #11
                      Sorry, liegt leider Meilen entfernt.
                      Pure OOP.
                      PHP-Code:
                          function table_out ($res
                          {
                              
                      $anz=mysql_num_fields($res);
                              echo 
                      "<table bgcolor='#f0f0f0' width='90%' border='0' cellpadding='2' cellspacing='2'>";
                              echo 
                      "<tr bgcolor='#D0D0D0'>";
                              
                      $link_id = -1;
                              if (
                      $_SESSION['S_Projekt']&& $this->mod=="match") echo "<th></th>";
                              for (
                      $i=0;$i<$anz;$i++) {
                                  echo 
                      "<th>";
                                  echo 
                      mysql_field_name($res,$i);
                                  if(
                      strtolower(mysql_field_name($res,$i))=="id" && $link_id!=0$link_id $i;
                                  echo 
                      "</th>";
                              }
                              echo 
                      "</tr>";
                              while (
                      $row=mysql_fetch_array ($res,MYSQL_ASSOC)){
                              echo 
                      "<tr>";        
                                  foreach (
                      $row as $elem) {
                                       if(
                      $link_id==$j++) {
                                           if (
                      $_SESSION['S_Projekt'] && $this->mod=="match"){
                                               echo 
                      "<td bgcolor'#E8E8E8'><font size='-1'>";
                                               echo 
                      "<input type=\"button\" name=\"free[$elem]\" value=\"=> Projekt\" 
                      onClick='javascript: parent.partner.location.href=\"admin/admin_pac_top.php?view=21&id=
                      $elem\"'>";
                                                echo 
                      "</font></td>";
                                               echo 
                      "<td bgcolor'#E8E8E8'><font size='-1'>";
                                                   echo 
                      "<a href=\"analyse_db.php?id=$elem\">$elem</a>";
                                               echo 
                      "</font></td>";                         
                                           }else{
                                               echo 
                      "<td bgcolor'#E8E8E8'><font size='-1'>";
                                                  echo 
                      "<a href=\"analyse_db.php?id=$elem\">$elem</a>";
                                               echo 
                      "</font></td>";
                                           }
                                       }
                                       else{
                                          echo 
                      "<td bgcolor'#E8E8E8'><font size='-1'>";     
                                          echo 
                      $elem;
                                          echo 
                      "</font></td>";
                                       }
                                  }
                                  
                      $j=0;
                                  echo 
                      "</tr>\n";
                             }
                             echo 
                      "</table>";
                          } 
                      Yuppi, endlich Elite ...

                      Kommentar


                      • #12
                        was hat oop mit dem durchgehen aller tabellennamen (die du ja irgendwo hast) und nem
                        Code:
                        DESC <tabellenname>
                        zu tun?
                        Ich denke, also bin ich. - Einige sind trotzdem...

                        Kommentar


                        • #13
                          Können wir bitte wieder zu dem Jokerzeichenproblem zurückkommen.
                          IMHO glaube ich nicht das es an den Groupcols liegt.

                          SELECT * FROM corporation INNER JOIN personal ON corporation.id=personal.id INNER JOIN deko_bau ON personal.id=deko_bau.id INNER JOIN technik ON deko_bau.id=technik.id INNER JOIN bewertung ON corporation.id=bewertung.id WHERE personal.H_Englisch='1' AND deko_bau.GDB_TV='1' AND technik.Lichttechnik='1' GROUP BY bewertung.id ORDER BY 1

                          funzt!
                          Zuletzt geändert von Blaster; 11.12.2003, 22:40.
                          Yuppi, endlich Elite ...

                          Kommentar


                          • #14
                            hast du mal probiert statt * 2 - 3 spalten explizit anzugeben?
                            wenn das geht solltest du vorher mit
                            Code:
                            DESC
                            die spaltennamen der tabellen erfragen und dein select dementsprechend zusammenbasteln
                            Ich denke, also bin ich. - Einige sind trotzdem...

                            Kommentar


                            • #15
                              Genau das ist wohl das Letzte was ich tunen werde,
                              deshalb poste ich ja!
                              Diesen Nervenkrieg will ich mir schenken.
                              Yuppi, endlich Elite ...

                              Kommentar

                              Lädt...
                              X