Karl-Heinz Osmer: SQL (hier Fülltext, weil SQL allein dem Forum zu kurz ist)

Hallöle,

sitze immer noch an meinem Statistik- Problem von gestern.

SELECT    distinct adr1.id, adr1.bezeichnung, count(*)
...
group BY  adr1.bezeichnung, adr2.bezeichnung

Ich möchte wissen, wieviel BesucherFIRMEN (adr2.bezeichnung) Kontakt zu einem Aussteller (adr1.bezeichnung) wünschen.

Die Einzelsätze sind jedoch auf Mitarbeiterebene. Das heißt
eine BesucherFIRMA kann mehrere Mitarbeiter zur Messe senden, deshalb brauche ich distinct.

Nun möchte ich alle mit distinct verdichteten Zeilen pro Aussteller zählen, deshalb der count. Aber die Kombination aus distinct und count gibt unsinnige Ergebnisse.

Wie kann ich Zeilen zählen, die mit distinct erzeugt wurden?

LG Kalle

  1. Hi,

    auf die Gefahr hin auf ein Doppelposting zu antworten, das zu suchen ich aber jetzt zu faul bin, hier ein kurzer Hinweis:
    Du willst gleiche Adressen zusammenfügen, ja? Aber trotzdem die ID haben? Warum gruppierst du dann die ID eigentlich nicht erstmal mit, sonst ist das vermutlich kein gültiges SQL auch, wenn die Datenbank dir das abnimmt.
    SELECT addrid, COUNT(*)
    FROM ...
    WHERE...
    GROUP BY addrid

    sollte die Basisstruktur deiner Abfrage sein. Er führt also die Sätze gleicher ID zusammen und zählt dabei, welche Sätze zusammengefügt wurden.

    MfG
    Rouven

    --
    -------------------
    ss:) zu:) ls:& fo:) de:< va:{ ch:? sh:) n4:( rl:? br:$ js:| ie:) fl:(
    1. Hi,

      SELECT addrid, COUNT(*)
      FROM ...
      WHERE...
      GROUP BY addrid

      Dann bekomme ich ZU VIELE Treffer, nämlich JEDEN Mitarbeiter. Wenn Meyer und Schulze von Firma A BEIDE mit Firma B Kontakt wünschen, bringt der count "2" statt "1".

      Ich will aber Firma A nur einmal zählen.

      Genau das ist das Problem, mein Auftraggeber braucht eine "bereinigte" Statistik.

      Da war doch noch was mit HAVING hinter dem GROUP. Wer kennt sich damit aus?

      LG Kalle

  2. Hallöle,

    ich glaube, ich habe mich nicht verständlich ausgedrückt. Habe eine Tabelle mit Kontaktwünschen zwischen Ausstellern und Besuchern einer Messe:

    AusstellerFirma BesucherFirma BesucherMitarbeiter
    --------------- ------------- -------------------
    A               X             Schulz
    A               Y             Meyer
    A               Y             Michelsen
    B               X             Schulz
    B               X             Schreiber
    B               Z             Klein

    Ergebnis soll die Anzahl der BesucherFirmen sein, die eine AusstellerFirma kontaktieren möchte:

    AusstellerFirma count(BesucherFirma)
    --------------- --------------------
    A               2
    B               2

    Meine Idee war, die Anzeige zunächst mit distinct auf die BesucherFirma zu verdichten:

    AusstellerFirma BesucherFirma
    --------------- -------------
    A               X
    A               Y
    B               X
    B               Z

    und dann die Zeilen pro AusstellerFirma zu zählen. KLappt aber nicht, weiß nicht, wo ich den count() einbauen soll.

    Habe schon mit HAVING count() rumgeprobt, aber keine vernünftige Dokumentation gefunden.

    Wer weiß weiter?

    LG Kalle

    1. Hallo,

      mit welcher Datenbank arbeitest du?
      Manchmal bieten verschiedene SQL Dialekte einfache Möglichkeiten, die auf anderen Datenbanken nicht funktionieren.

      Grüße
      Marcus

      --
      Wenn der Weg das Ziel ist, ist das Ziel dann weg?
      1. Hallo,

        mit welcher Datenbank arbeitest du?

        MySQL

    2. Hallöle,

      manchmal reicht es schon aus, sein Problem klar zu definieren, um der Lösung näher zu kommen.

      Beim Proben habe ich distinct mal in den count gesetzt:
      SELECT    adr1.id, adr1.bezeichnung Aussteller, count(distinct adr2.bezeichnung) Besucher

      Das ist es.

      LG Kalle