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

Ergebnisse nach mehreren Kriterien sortieren

Dieses Thema im Forum "Oracle" wurde erstellt von Nuggme, 21 November 2016.

  1. Nuggme

    Nuggme Benutzer

    Liebe Leute,

    folgendes Problem: ich habe eine Tabelle, in der in der ersten Spalte ein Name, in der zweiten Spalte eine Abteilung und in der dritten Spalte jeweils eine Farbe eingetragen werden:

    Name: Abt: Farbe:
    David 1 gelb
    Sarah 1 rot
    Thomas 3 gelb
    Michi 2 rot



    Ich möchte nun gerne wissen, in welcher Abteilung wie viele Leute für die Farben gestimmt haben, das Ergebnis soll also so ausgegeben werden:

    gelb: rot:
    1: 1 1
    2: 0 1
    3: 1 0


    Da ich noch relativ neu im Umgang mit SQL bin, weiß ich nicht wie ich das am effizientesten hinbekomme! Mein etwas kläglicher Ansatz wäre:

    select count(Name)


    from testtable


    group by Farbe;


    Wahrscheinlich ist das echt easy, aber ich kriegs nicht mit einer Abfrage hin...

    Nuggme
     
  2. ukulele

    ukulele Datenbank-Guru

    Also da gibt es zwei Möglichkeiten wie das Ergebnis aussieht. Die erste wäre vom Code her die einfachere nämlich mit GROUP BY:
    Code:
    SELECT Abt,Farbe,count(*) AS Anzahl FROM tabelle GROUP BY Abt,Farbe ORDER BY Abt,count(*) DESC
    Das Ergebnis sieht dann allerdings nicht wie gewünscht aus sondern hat pro Farbe eine Zeile. Wenn das Ergebnis zwigend den Inhalt der Spalte, also die Farbe, zu einer eigenen Spalte machen soll gibt es dafür Ansätze z.B. mit PIVOT oder mit mehreren Joins oder mit CASE-Anweisungen, abhängig von der Anzahl der möglichen Werte (Farben). Am einfachsten wäre in deinem Beispiel:
    Code:
    SELECT Abt,sum(CASE WHEN Farbe = 'rot' THEN 1 ELSE 0 END) AS Rot,,sum(CASE WHEN Farbe = 'gelb' THEN 1 ELSE 0 END) AS Gelb FROM tabelle GROUP BY Abt ORDER BY Abt
    Das berücksichtigt jetzt aber erstmal nur zwei Farben.
     
  3. akretschmer

    akretschmer Datenbank-Guru

    Code:
    test=*# select * from nuggme ;
      name  | abt | farbe
    --------+-----+-------
     david  |  1 | gelb
     sarah  |  1 | rot
     thomas |  3 | gelb
     michi  |  2 | rot
    (4 Zeilen)
    
    test=*# select abt, count(1) filter (where farbe = 'gelb') as gelb, count(1) filter (where farbe = 'rot') as rot from nuggme group by abt;
     abt | gelb | rot
    -----+------+-----
      1 |  1 |  1
      3 |  1 |  0
      2 |  0 |  1
    (3 Zeilen)
    
    test=*# select abt, sum(1) filter (where farbe = 'gelb') as gelb, sum(1) filter (where farbe = 'rot') as rot from nuggme group by abt;
     abt | gelb | rot
    -----+------+-----
      1 |  1 |  1
      3 |  1 |   
      2 |  |  1
    (3 Zeilen)
    
     
  4. Nuggme

    Nuggme Benutzer

    Wow, vielen Dank!!

    Lg Nuggme
     
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