Announcement

Collapse
No announcement yet.

Abfragen verschachteln SUM COUNT und DISTINCT

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

  • Abfragen verschachteln SUM COUNT und DISTINCT

    Hallo mal wieder allerseits, ein problem gelöst doch das 2 te folgt sogleich

    Habe mir 2 Abfragen gebastelt die auch das liefern was ich möchte, nun suche ich jedoch nach einer Möglichkeit das ganze in einer abfrage zu kombinieren,
    komme leider nicht ganz zum bis zum Schluss durch ohne Fehler

    Also erstmal meine beiden Abfragen einzeln
    [highlight=sql]
    SELECT Lager, Reihe, MAX( Regal ), Count(DISTINCT Lager + Reihe)
    FROM lager
    GROUP BY Lager, Reihe ;
    [/highlight]
    [highlight=sql]
    SELECT sum( cnt ) FROM (SELECT count( DISTINCT Lager + Reihe ) AS cnt
    FROM lager
    GROUP BY Lager, Reihe) AS Anzahl ;
    [/highlight]
    ist es möglich diese beiden Abfragen zu einer zu machen?

    Mein Versuch bisher ist
    [highlight=sql]
    SELECT Lager, Reihe, MAX( Regal ), SUM( cnt )
    FROM
    (SELECT count( DISTINCT Lager + Reihe ) AS cnt
    FROM lager
    GROUP BY Lager, Reihe)
    GROUP BY Lager, Reihe AS Anzahl
    [/highlight]

    MfG
    Alex

  • #2
    Hallo,

    eine Subquery sollte dafür genügen:
    [highlight=sql]
    select Lager, Reihe, max_regal, sum(cnt)
    from (
    SELECT Lager, Reihe, MAX( Regal ) max_regal, Count(DISTINCT Lager + Reihe) cnt
    FROM lager
    GROUP BY Lager, Reihe)
    GROUP BY Lager, Reihe, max_regal
    [/highlight]

    Gruß Falk
    Wenn du denkst du hast alle Bugs gefunden, dann ist das ein Bug in deiner Denksoftware.

    Quellcode ohne ein Mindestmaß an Formatierung sehe ich mir nicht an! Ich leiste keinen Privatsupport per Mail oder PN!

    Comment


    • #3
      Erstmal danke für die Antwort,

      leider macht die Subquery nicht ganz das was ich mir als Ergebnis erhoffte.

      [highlight=sql]
      SELECT Lager, Reihe, max_regal, sum( cnt )
      FROM (

      SELECT Lager, Reihe, MAX( Regal ) AS max_regal, Count( DISTINCT Lager + Reihe ) AS cnt
      FROM lager
      GROUP BY Lager, Reihe
      ) AS zwischen
      GROUP BY Lager, Reihe, max_regal
      [/highlight]

      Ich habe dann zwar 4 Zeilen und sum (cnt) ist dort auch als Spalte enthalten, das Ergebnis der Spalte sum(cnt) ist jedoch in jeder zeile eine 1 und nicht insgesamt die erhoffte 4

      Comment


      • #4
        Hallo,
        Originally posted by alexm83 View Post
        ...leider macht die Subquery nicht ganz das was ich mir als Ergebnis erhoffte.
        sorry, dass meine Glaskugel nicht wusste was du dir als Ergebnis erhofft hast ...
        Vlt. solltest du dann mal posten was du für Daten hast und was dein gewünschtes Ergebnis ist!? Bisher wolltest du nur wissen, ob es möglich ist deine beiden Abfragen zu vereinen. Mglws. sieht ein Lösung für dein ursprüngliches Problem aber ganz anders aus.

        Gruß Falk
        Wenn du denkst du hast alle Bugs gefunden, dann ist das ein Bug in deiner Denksoftware.

        Quellcode ohne ein Mindestmaß an Formatierung sehe ich mir nicht an! Ich leiste keinen Privatsupport per Mail oder PN!

        Comment


        • #5
          Antwort da hast Du natürlich recht hatte schon den gleichen gedanken, also das Problem etwas klarer gestaltet bzw. einfacher erörtert. Gibt es vielleicht eine Funktion einfach nur die Zeilen(nicht Spalten) des gelieferten Ergebnisses der MySQL Ausgabe zu zählen?
          Hab ich also 4 Zeilen hätte ich gern eine 4, hab ich 6 Zeilen eine 6.
          Mit meiner zweiten Abfrage erreiche ich dieses zwar,
          [highlight=sql]
          SELECT sum( cnt ) FROM (SELECT count( DISTINCT Lager + Reihe ) AS cnt
          FROM lager
          GROUP BY Lager, Reihe) AS Anzahl ;
          [/highlight]
          allerdings etwas durch die Brust ins Auge ist mir schon klar, könnte es sein das ich mit mysql_num_rows auf der richtigeren Fährte wäre?

          MfG Alex

          Comment


          • #6
            Hallo,

            so richtig ist mir immer noch nicht klar, was du als Ergebnis erwartest. Möchtest du im Resultset eine zusätzliche Spalte in der einfach immer die Anzahl der Zeilen des Resultset steht oder willst du einfach nach Abfrage1 ermitteln wieviele Zeilen dieses Resultset enthält?
            Ersteres wird ziemlich aufwendig und macht wenig Sinn. Zweiteres kannst du mit der bereits genannten API-Funktion mysql_num_rows oder über den Aufruf von FOUND_ROWS() erledigen.

            Gruß Falk
            Wenn du denkst du hast alle Bugs gefunden, dann ist das ein Bug in deiner Denksoftware.

            Quellcode ohne ein Mindestmaß an Formatierung sehe ich mir nicht an! Ich leiste keinen Privatsupport per Mail oder PN!

            Comment


            • #7
              Antwort ja genau zweiteres ist es, vielen Dank dafür Problem gelöst
              Die ganze Abfragerei ist dadurch um einiges geschrumpft auf
              [highlight=sql]
              SELECT SQL_CALC_FOUND_ROWS Lager, Reihe, MAX( Regal )
              FROM lager
              GROUP BY Lager, Reihe;
              SELECT FOUND_ROWS();
              [/highlight]

              MfG Alex

              Comment

              Working...
              X