Vinzenz Mai: mySQL: Count über mehrere Spalten

Beitrag lesen

Hallo Maik,

hier noch die SQL-Anweisung (hier für drei Arzneien, die Erweiterung an Deine Bedürfnisse sollte Dir nicht schwer fallen)

beh_id |arznei1|arznei2|arznei3|...
   1   |   78  |   12  |   0   |
   2   |   12  |   0   |   0   |

  
SELECT                         /* Die Zielspalten, klar */  
  count(b.arznei) AS Anzahl,   /* Anzahl                */  
  b.arznei                     /* Häufigkeit            */  
FROM (  
  SELECT  
    id,                        /* aus welcher Zeile     */  
    a1 AS arznei,              /* gewünschte Daten      */  
    'a' AS spalte              /* aus welcher Spalte    */  
  FROM behandlungen  
  /* Anmerkungen:  
     Spaltennamen kannst Du nur in der ersten SELECT-Anweisung vorgeben  
     Eigentlich sollte ALL dafür sorgen, dass alle Datensätze angezeigt  
     werden, aber irgendwie wollten weder MySQL noch MS SQL Server 2000.  
     Daher habe ich zur Identifikation jeden Wertes mit Spalte und Zeile  
     gearbeitet.  
  */  
  UNION  
  SELECT id, a2, 'b' FROM behandlungen  
  UNION  
  SELECT id, a3, 'c' FROM behandlungen  
) AS b  
GROUP BY b.arznei              /* Gruppierungsfeld       */  
ORDER BY Anzahl DESC           /* Sortierung             */  

anzahl |arznei

3    |   0
  2    |  12
  1    |  78

Ja, mir ist eine Lösung mit Verwendung von UNION und Subselects eingefallen, diese beiden Features werden jedoch nicht von jeder MySQL-Version unterstützt. Welche MySQL-Version steht Dir zur Verfügung?

Mein Statement habe ich mit MySQL 4.1.11 getestet.
Möglicherweise gibt es auch andere Möglichkeiten; dies war die erste, die mir eingefallen ist und erfreulicherweise trotz des defekten Tabellendesigns (siehe Posting von nance) zum gewünschten Resultat führt.

Freundliche Grüße

Vinzenz