Count über zwei Tabellen

Pinky

Benutzer
Beiträge
5
Hallo zusammen,

ich hänge gerade an einem SQL-Statement und komme nicht so richtig vorwärts - vielleicht kann hier ja jemand helfen.

Ich habe eine Tabelle mit Benutzern und eine mit "Dingen" die den Benutzern gehören. Ausgeben möchte ich eine Liste aller Benutzer, sowie der Anzahl aller "Dinge" die der Benutzer in der Dingetabelle gelistet hat.

Soweit recht simpel - habe ich so gelöst:

SQL:
SELECT u.firstname as firstname, u.lastname as lastname, count(t.uid) as thingCount FROM user as u
join things as t
on u.uid = t.uid
group by t.uid

Klappt prima.
Woran ich scheitere, ist die Bedingung, dass nur "Dinge" mitgezählt werden sollen, die nicht "hidden=1" in der "Dinge"-Tabelle eingetragen haben.
Wenn ich in den "where` teil einfach where t.hidden=0 eintrage komme ich nicht zum richtigen Ergebnis.

Diverse versuche mit Select im Select sind auch gescheitert.

Hat jemand einen Rat?

Gruß
 
Werbung:

Pinky

Benutzer
Beiträge
5
Ich habe die Anfrage aus anonymisierungszwecken etwas vereinfacht, eventuell ist da ein Fehler entstanden. Auf den ersten Blick kann ich oben aber keinen Fehler erkennen.

Wo siehst du da einen (Syntaktischen) Fehler?

Und wie löse ich das Ursprungsproblem?
 

akretschmer

Datenbank-Guru
Beiträge
9.532
In Aggregationen müssen alle Spalten des Resultsets entweder aggregiert oder gruppiert sein. Dies ist schlicht nicht der Fall.
 

akretschmer

Datenbank-Guru
Beiträge
9.532
Aus Faulheitsgründen leicht reduziert ...

Code:
postgres=# select * from dinge ;
 nutzer | hidden 
--------+--------
      1 | f
      2 | f
      2 | f
      2 | t
      3 | t
(5 rows)

postgres=# select n.id, count(d) from nutzer n left join dinge d on n.id=d.nutzer group by n.id;
 id | count 
----+-------
  2 |     3
  3 |     1
  1 |     1
(3 rows)

postgres=# select n.id, count(d) from nutzer n left join dinge d on n.id=d.nutzer and not d.hidden group by n.id;
 id | count 
----+-------
  2 |     2
  3 |     0
  1 |     1
(3 rows)

postgres=#
 

Pinky

Benutzer
Beiträge
5
Habs getestet, der Count ist in der Tat falsch.

Ich versuche deine Variante mal umzusetzen und schaue was dabei rauskommt.
 

Pinky

Benutzer
Beiträge
5
Okay, lüppt soweit. Nu muss ich das Ergebnis wieder testen und checken ob die Werte stimmen.
In deinem Beispiel hast du count(d) verwendet, was bei mir einen Fehler erzeugt. Ich vermute hier müsste ich eine spalte wählen? d.uid z.B. läuft bei mir.
 
Werbung:

ukulele

Datenbank-Guru
Beiträge
4.647
Und du solltest in t keine Spalte t.uid haben die eigentlich ein Fremdschlüssel ist auf die Spalte u.uid, das ist sehr verwirrend. uid ist für mich UNIQUE IDENTIFIER und daher vom Namen her der jeweilige Tabellen PK. Dann ergäbe aber dein GROUP BY überhaupt keinen Sinn ;-)
 
Oben