Ankündigung

Einklappen
Keine Ankündigung bisher.

SUM aus zwei Spalten addieren

Einklappen

Neue Werbung 2019

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

  • SUM aus zwei Spalten addieren

    Hallo zusammen,
    ich übe gerade am aktuellen WM-Beispiel SQL und bin da auf ein Problem gestoßen.

    Ich möchte die Gesamtpunkte ermitteln.
    Dazu addiere ich zwei SELECTs, was auch teilweise funktioniert, nur einige Spiele, die sehrwohl Punkte erreicht haben (auch Deutschland ) werden nicht angezeigt.

    Code:
    $sqlSumScore = "SELECT
               (
               SELECT
               SUM(`spiele`.`punkte1`)
               FROM `spiele`
               WHERE `spiele`.`id_team1` = '$teamID'
               )
               +
               (
               SELECT
               SUM(`spiele`.`punkte2`)
               FROM `spiele`
               WHERE `spiele`.`id_team2` = '$teamID'
               )
               ";
    ...ich hab auch schon mit UNION getüftelt, doch jetzt geht mir die Puste aus und ich bitte euch um Hilfe.

    P.S.: Mit 2 DBs + 2 Abfragen deren Ergebnisse ich addiere klappts - is nur viel langsamer und ich denke SQL sollte das können...

    Grüße


  • #2
    Zitat von hsg32 Beitrag anzeigen
    Hallo zusammen,
    ich übe gerade am aktuellen WM-Beispiel SQL
    Löblich.

    P.S.: Mit 2 DBs + 2 Abfragen deren Ergebnisse ich addiere klappts - is nur viel langsamer und ich denke SQL sollte das können...

    Grüße

    Dunkel Deiner Worte Inhalt. Oder so ähnlich. Erklär es bitte besser. Table-Definition, Demo-Daten, Wunschresultat.

    PS.: SQL != SQL.
    PostgreSQL Development, 24x7 Support, Remote DBA, Training & Services

    Kommentar


    • #3
      Wenn MySql verwendet wird, dann kannste das 'umständlich', aber dennoch ergebnisversprechend so machen:
      PHP-Code:
      $sqlSumScore "SELECT
                         SUM(t.summe) AS Gesamtpunkte
                         FROM
                             (
                                 SELECT
                                 SUM(`punkte1`) AS summe
                                 FROM `spiele`
                                 WHERE `id_team1` = '
      $teamID'

                                 UNION

                                 SELECT
                                 SUM(`punkte2`) AS summe
                                 FROM `spiele`
                                 WHERE `id_team2` = '
      $teamID'
                             ) AS t
                         "

      Tabellenaufbau und DB-Design lasse ich mal aussen vor...

      Kommentar


      • #4
        Wie wäre es mit (schematisch)

        Code:
        SELECT SUM(punkte1) + SUM(punkte2) AS summe FROM spiele WHERE id_team1 = $id OR id_team2 = $id
        Dito wie mein Vorredner - Schema-Diskussion aussen vor.
        GitHub.com - ChrisAndChris - RowMapper und QueryBuilder für MySQL-Datenbanken

        Kommentar


        • #5
          Ja natürlich: MySQL (sorry)

          @raiguen
          Tabellenaufbau und DB-Design lasse ich mal aussen vor...
          Hast wahrscheinlich recht, da muss noch optimiert werden...
          (Ich sagte ja: bin am Üben/Lernen )

          @ChristianK
          bis jetzt hat das noch nicht geklappt, dennoch - Danke


          Bin auch zu müde, muss morgen noch mal dran...

          Danke euch

          Kommentar


          • #6
            Was heisst "nicht geklappt" für mich? Fehler, falsches Resultat?
            GitHub.com - ChrisAndChris - RowMapper und QueryBuilder für MySQL-Datenbanken

            Kommentar


            • #7
              Zitat von ChristianK Beitrag anzeigen
              Was heisst "nicht geklappt" für mich? Fehler, falsches Resultat?
              Unabhängig von seinem "Problem" rechnet dein SQL doch punkte1 + punkte2 für id_team1=$id plus punkte1 + punkte2 für id_team2=$id.
              Glaube nicht, dass das so beabsichtigt wäre.

              Mit dem SQL
              Code:
              SELECT
                  (SELECT SUM(`punkte1`) FROM `spiele` WHERE `id_team1` = '$teamID') + 
                  (SELECT SUM(`punkte2`) FROM `spiele` WHERE `id_team2` = '$teamID')
              AS `total`
              hab ich es grad gegen Testdaten ausprobiert, klappt einwandfrei.
              Ich vermute eher, dass ein Problem bei den Daten vorliegt, aber dazu bräuchten wir eben mal alle Fakten auf dem Tisch.
              VokeIT GmbH & Co. KG - VokeIT-oss @ github

              Kommentar


              • #8
                Code:
                select
                    sum(
                        case when
                            id_team1 = $teamId
                        then
                            punkte1
                        else
                            punkte2
                        end
                    ) summe
                from
                    spiele
                where
                    id_team1 = $teamId or
                    id_team2= $teamId;
                Ich würd's so machen.
                Crashkurs zum Thema Rechtschreibung: normalerweise (normaler weise oder normaler weiße), Standard (Standart), eben (ebend)

                Kommentar

                Lädt...
                X