Summe einer Spalte?!?

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

  • #31
    also irgendwie klappt es noch nich, oder ich hab die IF funktion hier falsch verstanden!

    ich habe jetzt deins genommen und meins hier um mal zu sehen, wie er es einzelnd berechnet:

    PHP-Code:
    SELECT s1.id_mann, IF ( s1.tore s2.tore30punkte1, IF ( s2.tore s1.tore30punkte2, IF ( s1.tore s2.tore10punkte3, IF ( s2.tore s1.tore10punkte4
    FROM sp s1
    JOIN sp s2 
    ON 
    (s1.id_spiel s2.id_spiel AND s1.id_mann != s2.id_mann)
    GROUP BY s1.id_mann 
    also hier kommt nie die richtigen punkte raus, ich kanns drehen und wenden wie ich möchte!

    SIEG= 3 Punkte / UNENTSCHIEDEN= 1 Punkt / NIEDERLAGE= 0 Punkte

    Kommentar


    • #32
      hmm,

      meine query geht u.a. nicht, weil ja nicht richtig gruppiert wird ....
      außerdem hab ich so die vermutung, daß wir nochmal JOINen müssen.

      ich wollt dich eigentlich mal selbst basteln lassen
      Die Zeit hat ihre Kinder längst gefressen

      Kommentar


      • #33
        also,

        diese tabellenstruktur (hat sich nicht viel geändert)
        Code:
        # Tabellenstruktur für Tabelle `sp`
        CREATE TABLE sp (
          id int(11) NOT NULL auto_increment,
          id_spiel int(11) NOT NULL default '0',
          id_mann int(11) NOT NULL default '0',
          tore int(11) NOT NULL default '0',
          PRIMARY KEY  (id)
        ) TYPE=MyISAM;
        
        # Daten für Tabelle `sp`
        INSERT INTO sp VALUES (1, 1, 1, 3);
        INSERT INTO sp VALUES (2, 1, 2, 6);
        INSERT INTO sp VALUES (3, 2, 1, 4);
        INSERT INTO sp VALUES (4, 2, 3, 6);
        INSERT INTO sp VALUES (5, 3, 2, 3);
        INSERT INTO sp VALUES (6, 3, 3, 1);
        INSERT INTO sp VALUES (7, 4, 1, 0);
        INSERT INTO sp VALUES (8, 4, 4, 7);
        INSERT INTO sp VALUES (9, 5, 2, 3);
        INSERT INTO sp VALUES (10, 5, 4, 3);
        INSERT INTO sp VALUES (11, 6, 3, 1);
        INSERT INTO sp VALUES (12, 6, 4, 2);
        ergibt mit dieser query
        Code:
        SELECT 
          s1.id_mann mannschaft, 
          SUM(IF (s1.tore - s2.tore > 0, 3, IF (s1.tore < s2.tore, 0, 1))) punkte,
          SUM(s1.tore) eigenetore,
          SUM(s2.tore) gegentore,
          SUM(s1.tore) - sum(s2.tore) tordifferenz
        FROM
          sp s1
        JOIN
          sp s2 
        ON (
          s1.id_spiel = s2.id_spiel 
          AND s1.id_mann != s2.id_mann
        )
        GROUP BY 
          s1.id_mann
        ORDER BY
          punkte DESC, 
          tordifferenz DESC
        diese wunderschöne auflistung
        Code:
        mannschaft|punkte|eigenetore|gegentore|tordifferenz 
        4|7|12|4|8|
        2|7|12|7|5|
        3|3|8|9|-1|
        1|0|7|19|-12|
        die eigentlich genau das sein sollte, was du haben willst. ordnet bei punktegleichheit übrigens noch nach tordifferenz.

        ich habs nur für ca. 60% durchgerechnet, es scheint aber zu passen ...

        die umwandlung deiner alten tabelle in die von mir vorgeschlagene form sollte auch nicht so das problem sein.

        EDIT:
        der titel des threads entspricht schon lange nicht mehr der komplxität der query
        als dankeschön kannst du ja mal ausführlich kommentieren, was die query macht, wenn ich hier schon unentgeldlich arbeite, will ich wenigsten, daß du verstehst, was die query macht

        EDIT:
        hmm, wie sich natürlich die sache verhält, wenn du auch noch rückspiele hast, weiß ich jetzt nicht, ... hoffentlich ists egal ...
        Zuletzt geändert von derHund; 04.01.2004, 03:14.
        Die Zeit hat ihre Kinder längst gefressen

        Kommentar


        • #34
          erstmal nochmal danke!

          so wenn ich jetzt noch folgendes einfüge:

          PHP-Code:
            SUM(IF (s1.tore s2.tore 010)) siege,
            
          SUM(IF (s1.tore s2.tore10)) unentschieden,
            
          SUM(IF (s1.tore s2.tore10)) niederlagen
          dann gibt er mir jetzt ja noch siege, unentschieden, niederlagen aus! jedenfalls funktioniert es mit deinem beispiel hier so!


          für die rückrunde hab ich wieder extra ne zeile genommen! also ich hab HINRUNDE und RÜCKRUNDE getrennt gemacht.

          so jetzt aber noch mal zum verstehen! ich hab mir hier ja meine tabelle nun aufgelistet und meine spieltage auch, jetzt verstehe ich soweit auch, was das hier macht, aber eins verstehe ich nicht:

          PHP-Code:
          ON (
            
          s1.id_spiel s2.id_spiel 
            
          AND s1.id_mann != s2.id_mann

          also ich weiss wohl wenn ich es nicht mache, dass er dann für die zweiten zeilen nicht weiter auflistet, sondern immer nur den gleichen nimmt! (so war es jedenfalls, als ich mir die spiele aufgelistet habe und das nciht drin hatte, dann ging das mit der heimmannschaft zwar, nur die gästemannschaft war immer die gleiche, baute ich es rein, funzte es!

          so JOIN bedeutet doch, dass man ne zweite tabelle mit reinbezieht, in unserem fall die gleiche tabelle, aber eben halt immer die zweite zeile zu der ersten! die benennen wir dann halt s1 und s2, damit wir die tore auch nicht durcheinander bringen (s1.tore z.b.) ich hoffe ich hab die funktion so einigermaßen verstanden!


          EDIT:

          müsste

          PHP-Code:
          SUM(IF (s1.tore s2.tore 010)) siege
          nicht das gleiche sein, wie:

          PHP-Code:
          SUM(IF (s1.tore s2.tore10)) siege
          ???

          Kommentar


          • #35
            Boah kannst Du auch mal was selbst ausprobieren oder lösen?
            Beantworte nie Threads mit mehr als 15 followups...
            Real programmers confuse Halloween and Christmas because OCT 31 = DEC 25

            Kommentar


            • #36
              Original geschrieben von MelloPie
              Boah kannst Du auch mal was selbst ausprobieren oder lösen?
              hab ich doch mit meinen siegen, niederlage und unentschieden! es können halt nicht alle so genies sein wie du

              im halben jahr werde ich sicherlich sagen, boah wie konnte ich mich so anstellen und mich so unbeholfen anstellen...

              Kommentar


              • #37
                Recht hatter aber schon.

                Kommentar


                • #38
                  mir fehlten halt die ansätze, jetzt habe ich die und versuche es ja! meine spieltage muss ich ja nun auch mit dem JOIN zurückholen, dass hab ich ja auch schon hinbekommen!

                  Kommentar


                  • #39
                    was sind s1 und s2???

                    wenn ich diesen code in den query eingebe erhalte ich immer syntax error:

                    code:--------------------------------------------------------------------------------
                    SELECT
                    s1.id_mann mannschaft,
                    SUM(IF (s1.tore - s2.tore > 0, 3, IF (s1.tore < s2.tore, 0, 1))) punkte,
                    SUM(s1.tore) eigenetore,
                    SUM(s2.tore) gegentore,
                    SUM(s1.tore) - sum(s2.tore) tordifferenz
                    FROM
                    sp s1
                    JOIN
                    sp s2
                    ON (
                    s1.id_spiel = s2.id_spiel
                    AND s1.id_mann != s2.id_mann
                    )
                    GROUP BY
                    s1.id_mann
                    ORDER BY
                    punkte DESC,
                    tordifferenz DESC
                    --------------------------------------------------------------------------------
                    irgendwo mach ich nen fehler.aber ich komm nicht drauf...


                    #1109 - Unknown table 's2' in field list

                    was bedeutet das?
                    Zuletzt geändert von afeu; 10.02.2004, 15:07.

                    Kommentar

                    Lädt...
                    X