Wie kann ich in SQL zwei Counts miteinander vergleichen?
Ich habe drei Tabellen: COUNTRY, GEO_MOUNTAIN und GEO_LAKE.
COUNTRY hat ein Attribute CODE, dass in GEO_MOUNTAIN und GEO-LAKE als COUNTRY zu finden ist.
Nun möchte ich alle Länder ausgeben, die mehr Seen als Berge haben.
Einer meiner bisherigen Versuche:
SELECT a.name, COUNT(b.country)
FROM COUNTRY A, GEO_LAKE B WHERE a.code = b.country
AND COUNT(b.country) > ALL (
SELECT COUNT(c.country)
FROM GEO_MOUNTAIN C
WHERE a.code = c.country )
GROUP BY a.name
Das Problem liegt hier darin, zwei Count-Operationen zu vergleichen.
1 Antwort
Lake und mountain sind Tabellen der Form LandID und LakeID/MountainID korrekt?
Soll's schön sein oder funktionieren?
Als erstes Lake nach country gruppieren mit Count. Die ID jedes Landes steht ja mehrmals drinnen.
Dann haste ne Tabelle der form: landID Anzahl seen.
Dann nächste das gleiche mit mountain.
Dann beide mit nem Join verbinden. A.landID = b.landID
Dann haste ne Tabelle der Form:
LandID Anzahl Berge Anzahl seen.
Dann darauf nen select mit dem Vergleich in. Der where Klausel.
Geht mit Sicherheit eleganter und warscheinlich performanter. Aber das dürfte funktionieren.
Diese SQL nur mit Geo Lake.
Dann die gleiche mit Geo mountain.
Und dann select * Form ( (sql1) outer Join (sql2) on a.country = b.country)
Dann müsstest du das ganze mit den korrekten Werten haben.
Wie es genau im SQL aussieht müsste dir dann zusammen fieseln. Da müsste ich auch n bissel rumprobieren.
Kurz: erst beide guppieren mit Count (seperat)
Dann beide Tabellen (Lake und mountain) zusammenführen.
Und dann die counts prüfen.
Meinst du so? (Hier jetzt ohne die größer Abfrage)
Das Problem hierbei ist, dass die beiden COUNTS auf diese Weise identisch werden.