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

Count aber alle Daten behalten

Dieses Thema im Forum "MySQL und MariaDB" wurde erstellt von Kazume, 30 Mai 2017.

  1. Kazume

    Kazume Benutzer

    Hallo zusammen,


    ich würde gerne etwas zusammen zählen lassen mit einem Group by allerdings auch alle anderen Daten abrufen.

    Auftragsnummer 20004 kommt 4x vor
    Auftragsnummer 20005 kommt 20x vor

    diese Daten stehen jeweils der Anzahl enstprechend oft in der Datenbank.
    Ich würde die Anzahl der Rows auch gerne beibehalten allerdings die Häufigkeit wie oft sie vorkommen zusätzlich im Select haben wollen.

    Anzahl Auftragsnummer
    4 20004
    4 20004
    4 20004
    4 20004

    hatte mehrfach ein Subselect ausprobiert z.B in der Form count(Auftragsnummer) group by Auftragsnummer
    dann bekomme ich allerdings nur eine Row.

    Hoffe es ist verständlich :p
     
  2. akretschmer

    akretschmer Datenbank-Guru

    Nah dran, aber doch vorbei ...

    Code:
    test=*# select * from kazume ;
     auftragsnummer |  t   
    ----------------+-----------------
      20004 | das ist zeile 1
      20004 | das ist zeile 2
      20004 | das ist zeile 3
      20004 | das ist zeile 4
      20004 | das ist zeile 5
      20008 | das ist zeile 1
      20008 | das ist zeile 2
      20008 | das ist zeile 3
      20009 | das ist zeile 1
      20009 | das ist zeile 2
      20009 | das ist zeile 3
      20009 | das ist zeile 4
    (12 Zeilen)
    
    test=*# select count(1) over (partition by auftragsnummer), * from kazume ;
     count | auftragsnummer |  t   
    -------+----------------+-----------------
      5 |  20004 | das ist zeile 1
      5 |  20004 | das ist zeile 2
      5 |  20004 | das ist zeile 3
      5 |  20004 | das ist zeile 4
      5 |  20004 | das ist zeile 5
      3 |  20008 | das ist zeile 1
      3 |  20008 | das ist zeile 2
      3 |  20008 | das ist zeile 3
      4 |  20009 | das ist zeile 1
      4 |  20009 | das ist zeile 2
      4 |  20009 | das ist zeile 3
      4 |  20009 | das ist zeile 4
    (12 Zeilen)
    
    test=*#
    
     
    Kazume gefällt das.
  3. Kazume

    Kazume Benutzer

    Leider ist es MySQL also ohne over partition by


    Ich liebe dich akretschmer du hilfst mir immer auf die Sprünge! :)

    Lösung: ( SELECT COUNT(1) FROM s_order_details sol where sol.ordernumber = sod.ordernumber)

    Bis auf count(1) hatte ich alle Variationen ausprobiert, das Count(1) war mir unbekannt.
    Gleich mal schauen was es genau macht :D
     
    Zuletzt bearbeitet: 30 Mai 2017
  4. ukulele

    ukulele Datenbank-Guru

    In jedem Fall kann man das "zu Fuss" erledigen:
    Code:
    SELECT   t1.*,
         t2.anzahl
    FROM   tabelle t1
    LEFT JOIN (
    
    SELECT   Auftragsnummer,
         count(*) AS anzahl
    FROM   tabelle
    GROUP BY Auftragsnummer
    
         ) t2
    ON     t1.Auftragsnummer = t2.Auftragsnummer
     
    Kazume gefällt das.
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