mehrere SUM() und COUNT() addieren

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

  • mehrere SUM() und COUNT() addieren

    Hallo,

    ich habe ein Problem und zwar will ich zwei SUM() und zwei COUNT() Ergebnisse addieren aber irgendwie kommt was raus was nicht stimmen kann. Hier mal meine mysql Query:

    Code:
    SELECT user.name, user.right_id, 
    SUM(group_bet.points+final_bet.points) AS sumPoints, COUNT(group_bet.bet_id+final_bet.bet_id) AS bets
    FROM user 
    LEFT JOIN group_bet
    ON group_bet.user_id = user.user_id
    LEFT JOIN final_bet
    ON final_bet.user_id = user.user_id
    GROUP BY user.user_id
    ORDER BY sumPoints DESC, bets DESC
    Ich hoffe ihr versteht was ich erreichen will und könnt mir bei meinem kleinen Problem helfen...

    MfG
    Cappo

  • #2
    Welches Ergebnis bezweckst du mit COUNT()? COUNT(group_bet.bet_id+final_bet.bet_id) ergibt nämlich keinen Sinn.

    Kommentar


    • #3
      ich glaub er will damit ermitteln, wieviele Einzelgebote letztlich die sumPoints ergaben ...

      dabei sollte er aber die Counts getrennt vornehmen .also ein Count für die normalen bets und einer für die final_bets .. ich glaub nicht, dass MySQL bei COunt mit einer Mischung aus 2 Spalten so klarkommt
      [font=Verdana]
      Wer LESEN kann, ist klar im Vorteil!
      [/font]

      Kommentar


      • #4
        Also in "bets" sollen zum Schluss alle Tipps (natürlich addiert) eines Users stehen und in "sumPoints" alle Punkte (natürlich addiert). Da aber jeweils die bets und die points in zwei verschiedenen Tabellen sind weiß ich nicht wie ich die in einer Query zusammenrechnen kann...

        MfG
        David

        Kommentar


        • #5
          COUNT(group_bet.bet_id) + COUNT(final_bet.bet_id) ?

          Kommentar


          • #6
            Hmmm bringt auch nicht das richtige raus...

            Kommentar


            • #7
              Vielleicht solltest du erstmal erklären, was du eigentlich erreichen willst. Wie man sieht, ist es keine so gute Idee, die Leute das von der Query ableiten zu lassen, die gar nicht das macht, was sie soll.

              Kommentar


              • #8
                mal so als bescheidene Frage warum stehen bei dir eigentlich gleichwertige Informationen (zumindest aus Sicht dieser Abfrage) in 2 verschiedenen Tabellen? könntest du die nicht in einer Tabelle erfassen?
                [font=Verdana]
                Wer LESEN kann, ist klar im Vorteil!
                [/font]

                Kommentar


                • #9
                  Also...
                  ich habe unteranderem 2 Tabellen wo jeweils die Tipps (Bets) der User drin stehen...warum 2 Tabellen? in beiden Tabellen sind teilweise verschiedene Attribute (Spalten)...

                  nun will ich eine Rangliste der User machen die als erstes nach den gesamten Punkten der User und als zweites die Anzahl der Tipps ordnet (absteigend). Ich brauche dazu also die Gesamtpunkzahl und die Gesamtanzahl der Tipps jedes einzelnen Users.

                  Ich hoffe das hilft euch weiter...

                  MfG
                  David

                  Kommentar


                  • #10
                    hmmm .. unterschiedliche Spalten....

                    machst du bei einem Tipp eines Users einen Eintrag nur in eine der Tabellen oder in beide? ..Dann wäre ja theoretisch die Abfrage auf eine der Tabellen ausreichend ... offensichtlich bist du ja selbst mit den Daten nicht zufrieden ...

                    Ich würde dir daher als Startpunkt empfehlen - Mach ein Selekt, dass dir vorerst alle Datensätze liefert - ohne Sum und Count .. und schau, ob du dabei alle Einträge erhältst, die du erwartest - danach kannst du dann mit Sum und Count die zusammenfassung machen .. logischerweise müsstest du dann ja das richtige ergebnis kriegen ...
                    [font=Verdana]
                    Wer LESEN kann, ist klar im Vorteil!
                    [/font]

                    Kommentar


                    • #11
                      Zitat von eagle275 Beitrag anzeigen
                      hmmm .. unterschiedliche Spalten....

                      machst du bei einem Tipp eines Users einen Eintrag nur in eine der Tabellen oder in beide? ..Dann wäre ja theoretisch die Abfrage auf eine der Tabellen ausreichend ... offensichtlich bist du ja selbst mit den Daten nicht zufrieden ...

                      Ich würde dir daher als Startpunkt empfehlen - Mach ein Selekt, dass dir vorerst alle Datensätze liefert - ohne Sum und Count .. und schau, ob du dabei alle Einträge erhältst, die du erwartest - danach kannst du dann mit Sum und Count die zusammenfassung machen .. logischerweise müsstest du dann ja das richtige ergebnis kriegen ...
                      Bei einem Tipp kommt immer nur ein Eintrag in einer der beiden Tabelle (entweder group oder final)...ok werde die das mal ausprobieren was du geschrieben hast...

                      Kommentar


                      • #12
                        Zitat von Cappo Beitrag anzeigen
                        Bei einem Tipp kommt immer nur ein Eintrag in einer der beiden Tabelle (entweder group oder final)...ok werde die das mal ausprobieren was du geschrieben hast...
                        Also ich bins nochma,

                        ich hab das nun probiert aber und es funktioniert soweit. ich habe nun ein Select gemacht wo ich alle Tipps der User bekomme und alle Punkte (nicht zusammengezählt)...aber wie mach ich das nun das ich diese nun für jeden einzelnen User zusammenzählen und somit ordnen kann?

                        MfG
                        David

                        Kommentar


                        • #13
                          also ich würde das Zusammenrechnen dann doch lieber in PHP realisieren ..

                          wenn es denn absolut über die Datenbank sein soll .. Mach 2 getrennte Abfragen ..

                          eine berechnet SUM und COUNT jeweils für eine der beiden beteiligten Tabellen ..

                          dann muss dein PHP-Script - oder was auch immer du nimmst ja nur noch die beiden SUM und COUNT werte aus beiden Abfragen addieren.

                          Code:
                          SELECT user.name, user.right_id, 
                          SUM(group_bet.points) AS sumPoints_1, COUNT(group_bet.bet_id) AS bets_1
                          FROM user 
                          LEFT JOIN group_bet 
                          ON group_bet.user_id = user.user_id
                          group by user.user_id
                          order by sumPoints_1 desc, bets_1 desc
                          und das ganze Analog für die Final_bets Tabelle

                          wobei .. es könnte einfacher sein, wenn du das vorher noch auf jeweils 1 User beschränkst ...

                          und wenn es denn in einer Abfrage sein soll .. du kannst mittels SUM und COUNT eigentlich immer nur die Werte einer Spalte behandeln - du müsstest also ein weiteres SUM(final_bets.points) AS sumPoints_2 und ein COUNT für die Final_Bets Tabelle da reinbauen -

                          die Ergebnisse müsstest du auch in der Abfrage auch direkt schon addieren dürfen mit SUM(x)+SUM(y) .. und ebenso bei den COUNTS
                          Zuletzt geändert von eagle275; 27.06.2010, 18:04.
                          [font=Verdana]
                          Wer LESEN kann, ist klar im Vorteil!
                          [/font]

                          Kommentar


                          • #14
                            Zitat von eagle275 Beitrag anzeigen
                            also ich würde das Zusammenrechnen dann doch lieber in PHP realisieren ..

                            wenn es denn absolut über die Datenbank sein soll .. Mach 2 getrennte Abfragen ..

                            eine berechnet SUM und COUNT jeweils für eine der beiden beteiligten Tabellen ..

                            dann muss dein PHP-Script - oder was auch immer du nimmst ja nur noch die beiden SUM und COUNT werte aus beiden Abfragen addieren.

                            Code:
                            SELECT user.name, user.right_id, 
                            SUM(group_bet.points) AS sumPoints_1, COUNT(group_bet.bet_id) AS bets_1
                            FROM user 
                            LEFT JOIN group_bet 
                            ON group_bet.user_id = user.user_id
                            group by user.user_id
                            order by sumPoints_1 desc, bets_1 desc
                            und das ganze Analog für die Final_bets Tabelle

                            wobei .. es könnte einfacher sein, wenn du das vorher noch auf jeweils 1 User beschränkst ...

                            und wenn es denn in einer Abfrage sein soll .. du kannst mittels SUM und COUNT eigentlich immer nur die Werte einer Spalte behandeln - du müsstest also ein weiteres SUM(final_bets.points) AS sumPoints_2 und ein COUNT für die Final_Bets Tabelle da reinbauen -

                            die Ergebnisse müsstest du auch in der Abfrage auch direkt schon addieren dürfen mit SUM(x)+SUM(y) .. und ebenso bei den COUNTS
                            Also ich finde es besser wenn ich alles per DB Abfrage handlen kann da ich sonst das mehrdimensionale Array sortieren muss... ich habe nun folgende Abfrage mal probiert (wie du gesagt hast):

                            Code:
                            SELECT user.name, user.right_id, SUM(group_bet.points) 
                            + SUM(final_bet.points), COUNT(group_bet.bet_id) + COUNT(final_bet.bet_id)
                            FROM user 
                            LEFT JOIN group_bet
                            ON group_bet.user_id = user.user_id
                            LEFT JOIN final_bet
                            ON final_bet.user_id = user.user_id
                            GROUP BY user.user_id
                            das Ergebnis sieht wiefolgt aus:



                            Das kann nie sein...der zweite User von oben müsste 55 Punkte und 56 Tipps haben...

                            Auch wenn ich zwei SUMs seperat mache kommt auch nicht das richtige Ergebnis raus:

                            Code:
                            SELECT user.name, user.right_id, SUM(group_bet.points) as sumGroupPoints, 
                            SUM(final_bet.points) AS sumFinalPoints, COUNT(group_bet.bet_id) AS groupBets, 
                            COUNT(final_bet.bet_id) as finalBets
                            FROM user 
                            LEFT JOIN group_bet
                            ON group_bet.user_id = user.user_id
                            LEFT JOIN final_bet
                            ON final_bet.user_id = user.user_id
                            GROUP BY user.user_id
                            Und hier die komischen Ergebnisse:



                            MfG
                            David
                            Zuletzt geändert von Cappo; 27.06.2010, 19:22.

                            Kommentar


                            • #15
                              Code umbrechen bitte!
                              I don't believe in rebirth. Actually, I never did in my whole lives.

                              Kommentar

                              Lädt...
                              X