Abfrage mit count als Bedingung?

SQLNewBie

Benutzer
Beiträge
8
Hallo zusammen,

habt ihr eine Idee, wie ich eine Abfrage erstellen kann, aller Personen [Personentabelle] die z.b. von mindestens 5 (erhaltenen Briefen), mindestes 3 (Briefe gelesen) [BriefTabelle] haben?

Danke!
 
Werbung:
Demo:

Code:
edb=*# create table demo (zahl int);
CREATE TABLE
edb=*# insert into demo select (random()*10)::int from generate_series(1,20) s;
INSERT 0 20
edb=*# select zahl, count(zahl) from demo group by zahl;
 zahl | count 
------+-------
    9 |     1
    3 |     1
    5 |     2
    4 |     5
   10 |     1
    6 |     2
    7 |     4
    1 |     3
    8 |     1
(9 rows)

edb=*# select zahl, count(zahl) from demo group by zahl having count(zahl) > 3;
 zahl | count 
------+-------
    4 |     5
    7 |     4
(2 rows)
 
Das habe ich versucht aber hat leider nicht geklappt :/ Liegt vermutlich an dem * im SELECT
Sorry ich bin recht neu in diesem Thema, deshalb hier ein Beispiel:
SELECT *
FROM [Platzhalter*Personentabelle] t1
INNER JOIN [Platzhalter*BriefTabelle] on t1.PersonenID=t2.PersonenID
HAVING count(ERHALTENE BRIEFE) >= 5
AND count (GELESENE BRIEFE) >= 3
 
Ah okey perfekt Danke!
Noch eine Frage, wie kriege ich es hin, dass ich immer nur die counts auf die jeweilige Person beziehe? Kann ich sagen, z.B. zähle die gelesenen Briefe auf einen Kunden bezogen?
 
Perfekt Danke dir das funktioniert! Noch eine Frage: wie wäre das Vorgehen, wenn ich diese Abfrage mit einem oder mehreren OR´s verknüpfen müsste? Kommt dann alles ins HAVING oder kann ich weiterhin mit WHERE arbeite?
Sprich:
Entweder alle Personen [Personentabelle] die z.b. von mindestens 5 (erhaltenen Briefen), mindestes 3 (Briefe gelesen) [BriefTabelle] haben, ODER einen Rückruf getätigt haben [KontaktTabelle] ?
 
Ah okey, perfekt danke!
Wie ist das, wenn ich z.B. in einem der OR´s, eine Abfrage habe wie ...OR Anzahl von Mails > 5 AND (3 von den erhaltenen 5 wurden geöffnet)?
Sprich, ich hätte dann im AND eine Bedingung "geöffnet", die sich nicht auf die 5 erhaltenen beziehen dürfen.
 
sieht so aus, als ob Du beim count() mehrere benötigst (Anzahl gesamt, Anzahl geöffnet), dabei dann auch mit CASE WHEN ... zählen müßtest, und das dann im HAVING prüfen.
 
Werbung:
Ansatz 1)
HAVING ...
OR (count (t4.personenid) >= 5 and (CASE WHEN t3.responsetype = 'OPEN' AND count(t4.personenid) >= 3 THEN ?

Ist das grundsätzlich ein richtiger Ansatz?
 
Zurück
Oben