Announcement

Collapse
No announcement yet.

Summe der kleinsten 2 Werte und danach sortieren

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Summe der kleinsten 2 Werte und danach sortieren

    Ich habe folgende Tabelle:

    Code:
    CREATE TABLE `teiler` (
      `id` int(11) NOT NULL,
      `start_id` int(11) NOT NULL DEFAULT '0',
      `teiler` int(11) NOT NULL DEFAULT '0'
    ) ENGINE=InnoDB DEFAULT CHARSET=latin1 PACK_KEYS=1;
    
    INSERT INTO `teiler` (`id`, `start_id`, `teiler`) VALUES
    (1, 7, 10),
    (2, 7, 85),
    (3, 9, 11),
    (4, 9, 70),
    (5, 9, 2),
    (6, 7, 66),
    (7, 7, 100),
    (8, 9, 100),
    (9, 7, 250),
    (10, 7, 11);

    Nun möchte ich ein Select erstellen, das mir folgendes ausgibt:

    9 - 13
    7 - 76

    Also zur Erklärung:

    je start_id soll immer die Summe des beiden kleinsten Werte ermittelt und anschließend danach sortiert ausgegeben werden.

  • #2
    Warum sollte die beiden kleinsten Werte bei der ID 7 =76 sein?
    Christian

    Comment


    • #3
      Sorry ist hatte die Tabelle noch erweitert, als ich den Post vorbereitet habe.

      9 - 13
      7 - 21

      Comment


      • #4
        Optimal wäre ein Ergebnis wie:
        start_id 1.Wert 2.Wert Summe
        9 2 11 13
        7 10 11 21

        Comment


        • #5
          Sollte mit
          https://dev.mysql.com/doc/refman/8.0...criptions.html
          gehen
          Zuletzt editiert von Christian Marquardt; 01.10.2022, 15:49.
          Christian

          Comment


          • #6
            Danke für den Link, aber der funktioniert erst ab MySQL Version 8.0. Mein Provider stellt mir aber nur eine MySQL-DB Version 5.7 zur Verfügung.
            Gibt es hier auch eine Lösung?

            Comment


            • #7
              Da du eine Lösung mit Analytic und Pivot willst, wäre wohl eine StoredProcedure sinnvoll, in der du das einzeln programmieren kannst.
              Ergebnisse zwischenspeichern, aufbereiten
              Christian

              Comment


              • #8
                Es geht auch ohne Procedure (wenn es auch kein Standard SQL ist ).
                set @cnt=0;
                set @sid=null;
                select start_id, min(teiler) as t1, max(teiler) as t2, min(teiler) + max(teiler) as summe
                from (
                select start_id, teiler
                from (
                select if(@sid=start_id,(@cnt:=@cnt+1),(@cnt:=1)) lfdnr
                , (@sid:=start_id) start_id
                , teiler
                from teiler
                order by start_id, teiler
                ) q1
                where lfdnr<=2
                ) q2
                group by start_id
                ;

                Comment

                Working...
                X