Ankündigung

Einklappen
Keine Ankündigung bisher.

DISTINCT und SUM zusammen anwenden?

Einklappen

Neue Werbung 2019

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

  • DISTINCT und SUM zusammen anwenden?

    Hallo Community!

    Ich habe da gerade ein Problem und komme nicht weiter. Ich möchte eine MYSQL-Abfrage starten, bei der Integer-Felder (Punkte) zusammenaddiert werden sollen, aber nur die, allerdings für jeden Namen nur einmal.


    NAME | PUNKTE
    =================
    Hans 30
    Hans 40
    Peter 60
    Fritz 20


    Als Ergebnis soll dann letztlich 110 rauskommen, da der "zweite Eintrag" von Hans mit 40 Punkten nicht mehr einbezogen werden soll. Also benötige ich DISTINCT, weiß aber nicht, wie ich das mit SUM kombinieren kann.

    Ich habe folgendes versucht:

    Code:
    SELECT SUM(t1.PUNKTE) FROM ( SELECT(DISTINCT(PUNKTE)) FROM `TABELLE`) as t1
    ... was leider nicht funktioniert.
    Kann jemand helfen?

  • #2
    bei der Integer-Felder (Punkte) zusammenaddiert werden sollen, ... allerdings für jeden Namen nur einmal.
    Sorry, aber das ist absoluter Unsinn, wenn die Punktzahl (30 oder 40) willkürlich ist. Schließlich gibts kein Sortierkriterium.
    [COLOR="#F5F5FF"]--[/COLOR]
    [COLOR="Gray"][SIZE="6"][FONT="Georgia"][B]^^ O.O[/B][/FONT] [/SIZE]
    „Emoticons machen einen Beitrag etwas freundlicher. Deine wirken zwar fachlich richtig sein, aber meist ziemlich uninteressant.
    [URL="http://www.php.de/javascript-ajax-und-mehr/107400-draggable-sorttable-setattribute.html#post788799"][B]Wenn man nur Text sieht, haben viele junge Entwickler keine interesse, diese stumpfen Texte zu lesen.“[/B][/URL][/COLOR]
    [COLOR="#F5F5FF"]
    --[/COLOR]

    Kommentar


    • #3
      Ich hätte schon noch ein ORDER BY hinzugefügt... mir geht es ja nur um die generelle Verknüpfung der DISTINCT und SUM Abfrage

      Kommentar


      • #4
        Also generell mach man das mit GROUP BY...
        In diesem Fall muss man HAVING benutzen

        Kommentar


        • #5
          Ich würde es mal so probieren...

          Code:
          CREATE TABLE personen (
           name VARCHAR(10),
           punkte INT
          );
          
          INSERT INTO personen VALUES
          ('Hans', 30),
          ('Hans', 40),
          ('Peter', 60),
          ('Fritz', 20);
          
          mysql> SELECT SUM(gruppe.punkte)
              ->   FROM ( SELECT MIN(punkte) AS punkte
              ->            FROM personen
              ->           GROUP BY name
              ->        ) gruppe;
          +--------------------+
          | SUM(gruppe.punkte) |
          +--------------------+
          |                110 |
          +--------------------+
          1 row in set (0.04 sec)
          
          mysql>
          Grüße
          Thomas

          Kommentar


          • #6
            Zitat von waldicom Beitrag anzeigen
            Also generell mach man das mit GROUP BY...
            In diesem Fall muss man HAVING benutzen
            Ok, ich bin ja bereit zu lernen, aber ein kleiner Ansatz zum verwenden von HAVING in Bezug auf mein Beispiel wäre schon super und ich wäre sehr dankbar!

            Kommentar


            • #7
              GROUP BY ist aber ohne Sortierkriterium auch nicht definiert. Das Ergebnis kann also genauso 120 betragen.
              [COLOR="#F5F5FF"]--[/COLOR]
              [COLOR="Gray"][SIZE="6"][FONT="Georgia"][B]^^ O.O[/B][/FONT] [/SIZE]
              „Emoticons machen einen Beitrag etwas freundlicher. Deine wirken zwar fachlich richtig sein, aber meist ziemlich uninteressant.
              [URL="http://www.php.de/javascript-ajax-und-mehr/107400-draggable-sorttable-setattribute.html#post788799"][B]Wenn man nur Text sieht, haben viele junge Entwickler keine interesse, diese stumpfen Texte zu lesen.“[/B][/URL][/COLOR]
              [COLOR="#F5F5FF"]
              --[/COLOR]

              Kommentar


              • #8
                Offensichtlich ist meine Lösung (siehe #5) untergegangen, wenn ich den Thread so lese.


                Grüße
                Thomas

                Kommentar


                • #9
                  Nein, ist sie nicht. Aber wie gesagt - man hat keine Kontroller darüber, was die DB bei GROUP BY als Wert benutzt.

                  Oh, ich sehe gerade das MIN(). Forget about it.
                  [COLOR="#F5F5FF"]--[/COLOR]
                  [COLOR="Gray"][SIZE="6"][FONT="Georgia"][B]^^ O.O[/B][/FONT] [/SIZE]
                  „Emoticons machen einen Beitrag etwas freundlicher. Deine wirken zwar fachlich richtig sein, aber meist ziemlich uninteressant.
                  [URL="http://www.php.de/javascript-ajax-und-mehr/107400-draggable-sorttable-setattribute.html#post788799"][B]Wenn man nur Text sieht, haben viele junge Entwickler keine interesse, diese stumpfen Texte zu lesen.“[/B][/URL][/COLOR]
                  [COLOR="#F5F5FF"]
                  --[/COLOR]

                  Kommentar

                  Lädt...
                  X