Kalle_B: MySQL Abfrage - zählen

Hallöle,

habe eine DB-Tabelle mit Firmen und ihren Mitarbeitern, die sich durch das Feld ma unterscheiden. Das kann den Wert 1 .. 6 haben:

Firma ma
----- --
AEG   1
AEG   2
BFG   1
BFG   2
BFG   3
...

Jetzt möchte ich zählen, wieviele Mitarbeiter 1 es gibt, wie viele Mitarbeiter 2 usw:

1  2  3  4  5  6
--------- -- -- -- -- -- --
anwesened 59 16  9  2  0  0

Wie zählt man Inhalte eines Feldes? Ich habe bisher 6 getrennte SQL- Kommandos abgesetzt, muss aber an der Performance schrauben.

Lieben Gruß, Kalle

  1. Hello,

    Wie zählt man Inhalte eines Feldes? Ich habe bisher 6 getrennte SQL- Kommandos abgesetzt, muss aber an der Performance schrauben.

    Über das Feld gruppieren und zählen

    Harzliche Grüße vom Berg
    http://www.annerschbarrich.de

    Tom

    --
    Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
    Nur selber lernen macht schlau

    1. Über das Feld gruppieren und zählen

      Logisch. *brettvormkopf*

      Danke.

  2. yo,

    habe eine DB-Tabelle mit Firmen und ihren Mitarbeitern, die sich durch das Feld ma unterscheiden. Das kann den Wert 1 .. 6 haben:

    SELECT ma, COUNT(*) AS Anzahl
    FROM tabellen_namen
    GROUP BY ma

    das ist die einfache version, allerdings wirst du so keine einträge bekommen, die als Anzahl 0 haben (MA 5 und 6). dafür ist wiederum ein OUTER JOIN nötig, wobei meine frage ist, gibt es den noch eine zweite tabelle, wo alle mitarbeiter drinne stehen ?

    Ilja

    1. Hallöchen,

      SELECT ma, COUNT(*) AS Anzahl
      FROM tabellen_namen
      GROUP BY ma

      das ist die einfache version, allerdings wirst du so keine einträge bekommen, die als Anzahl 0 haben (MA 5 und 6). dafür ist wiederum ein OUTER JOIN nötig, wobei meine frage ist, gibt es den noch eine zweite tabelle, wo alle mitarbeiter drinne stehen ?

      Ohhh ja, die Wirklichkeit ist weitaus komplizierter. Aber der AHA- Effekt ist GROUP BY. Danke.

      Kalle

  3. Danke für eure Tipps,

    ... muss aber an der Performance schrauben.

    Der GROUP BY hat nicht die Geschwindigkeit gebracht, aber meine Denk- Blockade beseitigt: Habe die WHERE- Klausel erweitert. Nun nutzt MySQL einen bereits vorhandenen Key und der Suchlauf in phpMyAdmin ging von 8,.. sec auf 0,04 sec runter!

    So macht Datenbank wieder Spaß.

    Lieben Gruß, Kalle

    1. Habe die WHERE- Klausel erweitert. Nun nutzt MySQL einen bereits vorhandenen Key und der Suchlauf in phpMyAdmin ging von 8,.. sec auf 0,04 sec runter!

      So macht Datenbank wieder Spaß.

      Nochmal nachgedacht:
      Die betreffende, mit LEFT JOIN dazugelinkte Tabelle hat nur 6.200 Einträge. Das können auch locker 20.000 werden. Und OHNE Key braucht er dafür 8 sec mehr?

      MySQL ist wohl nicht gerade der Porsche unter den Datenbanken?

      Aber ich will ja nicht meckern. Besser ein kostengünstiger TURBO- Trabbi (MySQL mit Keys) als ein teurer roter Ferrari (Oracle?)

      Lieben Gruß, Kalle

      1. Hello,

        das hängt dann irgendwann wirklich von der gewählten Speichernutzung für MySQL ab!

        Harzliche Grüße vom Berg
        http://www.annerschbarrich.de

        Tom

        --
        Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
        Nur selber lernen macht schlau

      2. Hallo Kalle,

        Aber ich will ja nicht meckern. Besser ein kostengünstiger TURBO- Trabbi (MySQL mit Keys) als ein teurer roter Ferrari (Oracle?)

        so teuer ist der Ferrari auch nicht. Im Gegenteil ... hast du schon die 10g Express Edition ausprobiert?

        Viele Grüße,

        Jochen

        --
        Heute schon gescribbelt?
        Scribbleboard
        1. Hallo Jochen,

          so teuer ist der Ferrari auch nicht. Im Gegenteil ... hast du schon die 10g Express Edition ausprobiert?

          Habe im April 2005 10g_win32_db.zip heruntergeladen und auf dem Laptop installiert. Doch ein erhoffter Auftrag kam nicht zustande, der Laptop war saulangsam und die Platte voll.

          Eine Online- Schulung verging damit, dass ich per Mail- Kontakt die fehlerhafte Verbindung "reparierte", während ich die Telefonkonferenz mit halbem Ohr verfolgte. Als es endlich klappte, war der Termin zuende.

          Habe ich also wieder runtergeschmissen (auf CD gebrannt).

          Was ist jetzt die 10g Express Edition? Oracle light? Habe ein gewisses Interesse, bei Oracle am Ball zu bleiben, meine Kenntnisse verblassen langsam.

          Lieben Gruß, Kalle

          1. Hallo Kalle,

            Was ist jetzt die 10g Express Edition? Oracle light? Habe ein gewisses Interesse, bei Oracle am Ball zu bleiben, meine Kenntnisse verblassen langsam.

            ja, genau so geht es mir auch. So langsam werde ich zu alt für den Job.
            10g Express Edition Ich bin allerdings noch nicht zum installieren gekommen.

            Viele Grüße,

            Jochen

            --
            Heute schon gescribbelt?
            Scribbleboard
      3. yo,

        MySQL ist wohl nicht gerade der Porsche unter den Datenbanken?

        das hat nichts mit mysql zu tun. wenn bei einem join kein index benutzt wird, dann wird jedes dbms stöhnen. da kommen sehr leicht viele vergleiche vor.

        20.000 x 20.000 datensätze in beiden tabellen gleich 400.000.000 vergleiche.....

        tuning ist eines der kompliziertesten aktionen bei datenbanken, alleine schon die ausswahl, welche der beiden tabellen die treibende ist, kann riesen-unterschiede bewirken.

        das beste ist, du schaust dir mal in ruhe den ausführungsplan aus, um zu sehen, welche der vorhandenen indezies benutzt werden.

        Ilja