Marcel: Elemente zählen

Hallo zusammen,

ich weiß nicht weiter und hoffe nun hier Hilfe zu finden. Ich hänge ein bischen an der Abfrage, wie häufig Elemente in einer Tabelle sind. Die Tabelle entählt beispielsweise die Spalten "Name", "Vorname", "Geschlecht", "Status" und die Abfrage soll nun zählen, wie viele Männliche mit Status "aktiv" und wieviele Weibliche mit Status "aktiv" enthalten sind. Das Geschlecht wird mit M bzw. W angegeben. In der Tabelle sind 6 Männliche und 1 Weibliche enthalten.

Meine Idee war, es mit count() zu versuchen. Das sah dann so aus:
SELECT count( 'M' ) AS "# Männliche", count( 'W' ) AS "# Weibliche" FROM Tabelle WHERE 'Status' = 'aktiv';

Das Ergebnis ist (für Profis und Kenner wahrscheinlich nicht überraschend) in beiden Fällen 7. Ich stehe nun leicht auf dem Schlauch. Wer schubst mich runter?

Das ganze soll möglichst in einer Abfrage geschehen, als Ergebnis also 2 Spalten liefern in denen jeweils nur eine Zahl (die Anzahl) stehen soll. Wahrscheinlich ist es nur eine kleine Änderung, aber ich komme einfach nicht darauf. :-(

Gruß,
Marcel

P.S.: Bevor ich es vergesse zu erwähnen. Die Verwendung von SQL (nicht mySQL) ist (leider) erforderlich.

  1. Hallo,

    Mir fällt auf Anhieb ein

      
    SELECT   'männlich' AS Geschlecht,  
             COUNT(*) as [# Maennliche]  
      FROM   Tabelle t  
      WHERE  t.Status = 'aktiv'  
      AND    t.Geschlecht = 'M'  
    UNION  
    SELECT   'weiblich' AS Geschlecht,  
             COUNT(*) as [# Weibliche]  
      FROM   Tabelle t  
      WHERE  t.Status = 'aktiv'  
      AND    t.Geschlecht = 'W'  
    
    

    P.S.: Bevor ich es vergesse zu erwähnen. Die Verwendung von SQL (nicht mySQL) ist (leider) erforderlich.

    Aha, wer hätte das gedacht, dass du SQL verwenden musst? SQL ist kein Produkt sondern ein Acronym für eine Sprache der 4. Generation: _S_tructured _Q_uery _L_anguage

    Sicherlich meinst du Microsofts SQL Server mit dem Dialekt T-SQL (Transact-SQL). Dieses Produkt ist genauso miserabel wie mySQL. Du kennst dich aber wohl mit beidem nicht aus :)

    Ciao, Frank

    1. Dieses Produkt ist genauso miserabel wie mySQL.

      (Läuft aber sehr stabil und unterstützt Firmen bei Wertschöpfungen in Billionenhöhe.)

    2. Hallo,

      und zunächst einmal danke für das Code Beispiel.

      Aha, wer hätte das gedacht, dass du SQL verwenden musst? SQL ist kein Produkt sondern ein Acronym für eine Sprache der 4. Generation: _S_tructured _Q_uery _L_anguage

      Wofür SQL steht bekomme ich gerade noch hin. Mit meiner Aussage wollte ich lediglich vorbeugen, dass keine Beispiele mit mySQL spezifischen Befehlen gemacht werden. Da hab ich mich offenbar nicht präzise genug ausgedrückt.

      Sicherlich meinst du Microsofts SQL Server mit dem Dialekt T-SQL (Transact-SQL). Dieses Produkt ist genauso miserabel wie mySQL. Du kennst dich aber wohl mit beidem nicht aus :)

      Öh, ja. Ersteres kenne ich tatsächlich nur vom Hören. MySQL ist mir da schon geläufiger. Allerdings habe ich da bislang nicht derartige Abfragen fabriziert. Wenn dann habe ich die Treffermenge mit der mySQL Abfrage eingeschränkt und den Rest durch das passende PHP Script erledigt. Zugegeben nicht die cleverste Variante. ;-)

      Dort, wo ich diese spezielle Abfrage benötige, wird die Firebird-DB verwendet und mit IBExpert daran herumfurwerkelt.

      Nun denn. Vielen Dank nochmal.

      Gruß,
      Marcel

      1. Hallo nochmal,

        Nun denn.

        Na dann probier meinen Vorschlag doch mal aus. Ich bin der Meinung, er ist standard-konform zum ANSI-92 SQL Standard, den sogar MySQL teilweise unterstützt.

        Leider gibt es für Firebird/Interbase keine öffentlich frei zugängliche Dokumentation (man darf sie kaufen ... wow, typisch Borland) sonst könnte ich dir evt. auch syntax-mässig weiterhelfen. Aber vielleicht hast du ja die Doku vorliegen. Der UNION Operator ist sicherlich eine Variante, die auch bei dir funktionieren könnte.

        Und so schlimm ist die Abfrage-Aufgabe ja nun auch nicht. :)

        Grüsse
        Frank