Steffen: mySQL Anzahl untersch. Daten in 2 Spalten bei gl. Wert in 3. Sp.

Hallo,

ich möchte in einer Tabelle zählen, wieviele unterschiedliche Daten enthalten sind.

Spalte 1  Spalte 2  Spalte 3  Spalte 4
aaa       111       a         xxx
aaa       111       a         yyy
aaa       111       b         zzz
aaa       222       a         beliebig
aaa       333       c
bbb       444       a
bbb       555       a
bbb       666       d
ccc       777       e

Ergebnisspalte 1  Ergebnisspalte 2
aaa               4
bbb               3
ccc               1

Es soll gezählt werden für gleiche Einträge in der Spalte 1, wieviele unterschiedliche Datensätze es in den Spalten 2 und 3 gibt. Bei "aaa" soll zum Beispiel die doppelte Kombination "111" und "a" nur einmal gezählt werden. Innerhalb von "aaa" soll die Kombination "222" und "a" aber wieder mitgezählt werden.

Ich habe mich mit diversen DISTINCTs, COUNTs und GROUP BYs abgemüht, ohne dass es geklappt hat. Ich habe es bisher nur hingekriegt zu zählen, wie oft aaa, bbb usw. jeweils insgesamt vorhanden ist und wie oft innerhalb der Spalte 1 unterschiedliche Werte nur in Spalte 2 stehen (das brauchte ich aber beides auch). Letzteres habe ich mit "SELECT COUNT(DISTINCT(Spalte 2)), Spalte 1 FROM tabelle GROUP BY Spalte 1" und ersteres mit "SELECT Spalte 1, COUNT(*) FROM tabelle GROUP BY Spalte 1" (ich glaube, da hatte ich auch noch andere Lösungen) gemacht.

Die triviale Lösung für obiges Problem "SELECT COUNT(DISTINCT(Spalte 2, Spalte 3)), Spalte 1 FROM tabelle GROUP BY Spalte 1" scheint nicht zu funktionieren.

Gruß+Danke

  1. Hallo,

    und ein einfaches

    SELECT 'Spalte 1', 'Spalte 2', 'Spalte 3', COUNT(*)
      FROM Tabelle
      GROUP BY 'Spalte 1', 'Spalte 2', 'Spalte 3'

    tut es nicht?

    Ciao, Frank

    1. Hallo,

      und ein einfaches

      SELECT 'Spalte 1', 'Spalte 2', 'Spalte 3', COUNT(*)
        FROM Tabelle
        GROUP BY 'Spalte 1', 'Spalte 2', 'Spalte 3'

      tut es nicht?

      Ciao, Frank

      Nein, das liefert

      Ergebnisspalte 1  Ergebnisspalte 2
      aaa               2
      aaa               1
      aaa               1
      aaa               1
      bbb               1
      bbb               1
      bbb               1
      ccc               1

      Die 2 in der ersten Zeile kommt von der doppelten Kombination "111" und "a".

      Ich hätte in dieser Tabelle jetzt gerne noch alle Zeilen gezählt, in denen die Ergebnisspalte 1 identische Werte hat. Das habe ich auch mit einer verknüpften Abfrage versucht, aber das hat nur eine nicht hilfreiche Fehlermeldung ergeben.

      1. Hi,
        na, da machst du darauf nochmal ein Count GROUP BY 'Ergebnisspalte 1' ..?
        Ciao, Frank

        1. Hi,
          na, da machst du darauf nochmal ein Count GROUP BY 'Ergebnisspalte 1' ..?
          Ciao, Frank

          Hi,

          meinst Du so ungefähr?

          SELECT Ergebnisspalte 1, COUNT(*) FROM (SELECT Spalte 1 AS Ergebnisspalte 1, Spalte 2, Spalte 3 FROM tabelle GROUP BY Spalte 1, Spalte 2, Spalte 3) AS tab2 GROUP BY Ergebnisspalte 1

          Gibt leider nur einen Fehler

          1064: You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near 'SELECT Spalte 1 AS Ergebnisspalte 1, Spalte 2, Spalte 3 FROM table GRO

          Gruß

          1. Habe jetzt folgende (in meinen Augen unschöne) Lösung gefunden: mit CONCAT() fasse ich die zweite und die dritte Spalte zusammen, checke diese mit Distinct und zähle das ganze gruppiert nach der Spalte 1.

            SELECT COUNT(DISTINCT(CONCAT(Spalte 2, Spalte 3))), Spalte 1 FROM tabelle GROUP BY Spalte 1