Information ausblenden
Willkommen im Forum für alle Datenbanken! Registriere Dich kostenlos und diskutiere über DBs wie Mysql, MariaDB, Oracle, Sql-Server, Postgres, Access uvm

Limit Duplikate nur einmal zählen aber alle ausgeben

Dieses Thema im Forum "MySQL und MariaDB" wurde erstellt von big-mac36, 21 Juni 2016.

  1. big-mac36

    big-mac36 Benutzer

    Moin,

    ich habe leider bisher keine Lösung im Netz für mein Problem finden können,
    daher wende ich mich nun an euch.

    Ich habe eine Tabelle mit folgendem fiktiven Inhalt.


    id | user_nummer| menge|erledigt
    ----+----------------+--------+-------
    1 | 100 | 50 | 0
    2 | 200 | 30 | 0
    3 | 300 | 200 | 0
    4 | 400 | 150 | 0
    5 | 200 | 50 | 0
    6 | 500 | 330 | 0
    7 | 400 |50 | 0
    8 | 100 |50 | 0

    Ich benötige aus der Tabelle max 5 Ausgabewerte (id, user_nummer und menge ) mit der Bedingung erledigt = 0
    Allerdings, sollen doppelt/mehrfach vorkommende user_nummern nicht mitgezählt bzw. nur einmal gezählt werden aber alle weiteren mit ausgegeben werden.

    Sprich im Beispielfall müssten sechs Zeilen ausgeben werden trotz Limit von 5.
    Ausgabe:
    1 | 100 | 50
    2 | 200 | 30
    3 | 300 | 200
    4 | 400 | 150
    5 | 200 | 50
    6 | 500 | 330

    Ich hoffe man versteh was ich möchte.
    Danke schon mal für eure Hilfe.
     
  2. big-mac36

    big-mac36 Benutzer

    Ich denke ich habe einen Lösungsansatz.
    mysql_query("SELECT id, user_nummer, menge FROM mytable WHERE user_nummer IN (SELECT DISTINCT user_nummer FROM mytable WHERE erledigt= 0 LIMIT 5)");

    Allerdings, verweigert mir da mein xammp die Ausführung des querys.
    Wenn ich das LIMIT weg nehme geht es, allerdings wird dann auch die WHERE Bedingung um subquery ignoeriert.
    Wenn ich nun allerdings das subquery als eigenständiges query ausführe würd es ohne Probleme mit WHERE und LIMIT ausgeführt.
    Verstehe nicht so ganz wieso es dann bei subquery hakt.
     
  3. akretschmer

    akretschmer Datenbank-Guru

    Nach welcher Regel ist Datensatz id=5 im Resultset, nicht aber id=8? Das ist nicht eindeutig formuliert.
     
  4. big-mac36

    big-mac36 Benutzer

    Es sollen 5 unique user_nummern ausgegeben werden.
    Allerdings wenn eine user_nummer im Bereich von LIMIT 5 doppelt oder mehrfach vor kommt, soll diese mit ausgewgeben werden.

    Das Ausgabe Array wie oben rechne ich dann später noch zusammen.
    Im bereinigten Arry sieht es dann so aus:

    1 | 100 | 50
    2 | 200 | 80
    3 | 300 | 200
    4 | 400 | 150
    6 | 500 | 330

    Wenn man das direkt im query lösen kann, wäre das natürlich auch in Ordnung ;)
     
  5. akretschmer

    akretschmer Datenbank-Guru

    das paßt nicht, deine Aufgabenstellung ist nicht eindeutig.

    Code:
    test=*# select * from bigmac ;
     id | user_nummer | menge | erledigt
    ----+-------------+-------+----------
      1 |  100 |  50 | f
      2 |  200 |  30 | f
      3 |  300 |  200 | f
      4 |  400 |  150 | f
      5 |  200 |  50 | f
      6 |  500 |  330 | f
      7 |  400 |  50 | f
      8 |  100 |  50 | f
    (8 Zeilen)
    
    test=*# select user_nummer, array_agg(menge) from bigmac group by user_nummer limit 5;
     user_nummer | array_agg
    -------------+-----------
      400 | {150,50}
      200 | {30,50}
      500 | {330}
      100 | {50,50}
      300 | {200}
    (5 Zeilen)
    
    wie man sieht, sind bei 100, 200 und 400 je 2 Werte, in Deinem letzten Beispiel addierst die Werte bei 200, nicht aber bei 100 oder 400.
     
  6. big-mac36

    big-mac36 Benutzer

    Natürlich, du hast recht.
    Sorry für die Verwirrung.
    Aber dann hast du ja mein Anliegen schon mal verstanden, das ist gut ;)
     
  7. ukulele

    ukulele Datenbank-Guru

    Das Query könntest du mal im PHPmyAdmin oder was du als SQL Editor hast testen:
    Code:
    SELECT id, user_nummer, menge FROM mytable WHERE user_nummer IN (SELECT DISTINCT user_nummer FROM mytable WHERE erledigt= 0 ORDER BY user_nummer LIMIT 5)
    das könnte eigentlich so funktionieren. Wenn MySQL das nicht kann dann vielleicht so:
    Code:
    SELECT id, user_nummer, menge FROM mytable WHERE user_nummer IN (SELECT t.user_nummer FROM (SELECT DISTINCT user_nummer FROM mytable WHERE erledigt= 0) t ORDER BY t.user_nummer LIMIT 5)
     
  8. big-mac36

    big-mac36 Benutzer

    ok, ich habe nun festgestellt, warum xampp bei meinem versuch rumgezickt hat.
    phpMyAdmin schmeißt mir nämlich eine Fehlermeldung aus
    #1235 - This version of MySQL doesn't yet support 'LIMIT & IN/ALL/ANY/SOME subquery'

    Gibt da irgendwelche workarounds?
     
Die Seite wird geladen...

Diese Seite empfehlen

  1. Diese Seite verwendet Cookies. Wenn du dich weiterhin auf dieser Seite aufhältst, akzeptierst du unseren Einsatz von Cookies.
    Information ausblenden