Archiv verlassen und diese Seite im Standarddesign anzeigen : [SQL] Count(*) in Whereklausel möglich?
BodyLove
2013-10-14, 13:38:30
Ich habe hier eine Tabelle Einwohner. Der hat ein Attribut Wohnort. Wenn ich:
Select count(*), Wohnort from Einwohner group by count(*) desc;
Funktioniert die Abfrage. Ich will jetzt aber nur die Wohnorte selektieren, die auch größer als 10.000 Einwohner haben.
Wie mache ich das? Habt ihr die zündende Idee?
Besten dank im Voraus!
Baalzamon
2013-10-14, 13:43:56
Aus dem Kopf und ohne Gewähr:
Select count(*), Wohnort from Einwohner where Einwohner.Anzahl > 10000 group by count(*) desc;
Keine Ahnung, wo du die Anzahl der Einwohner gespeichert hast. Falls das nicht passen sollte, dann kannst du auch einfach eine weitere select-Abfrage in die where-Bedingung schreiben, das sollte dann passen.
maximum
2013-10-14, 13:44:57
Probier mal:
Select count(*), Wohnort from Einwohner WHERE Einwohner>10000 group by count(*) desc;
P.S. je nachdem wie die Spalte (Einwohner/Anzahl/Zahl/...) heißt anpassen.
Einwohner/Anzahl/Zahl>10000
BodyLove
2013-10-14, 13:52:53
Das Problem ist, das Attribut Anzahl existiert nicht. Diesen ziehe ich aus dem Count(*) raus.
Ich habe jetzt sowas probiert:
creat global temporary Table tmp_Ort as (select count(*), Wohnort from Einwohner);
Das Problem ist, dass er den Count nicht speichert und er einen alias will (was das auch bedeuten mag (muss googlen).
Baalzamon
2013-10-14, 13:55:08
Alias bedeutet, dass du dem Zwischenergebnis einen Namen gibst, sowas wie
select count(*) as Anzahl from Einwohner where Anzahl > 10000.
BodyLove
2013-10-14, 14:11:27
Super danke.
Jetzt habe ich es fast.
Ich habe:
create global temporary Table tmp_Ort as (select count(*) as anzahl, Wohnort from Einwohner group by Einwohner);
verwendet. Tabelle wird erstellt, leider ohne den Inhalt. Kopiert dieses Statement die Werte nicht rein?
Global Temporary hat es verursacht.
Allerdings habei ich nun eine sehr elegante Lösung gefunden.
select Wohnort from Einwohner group by Wohnort having count(*) > 10000;
ManuelCalavera
2013-10-14, 14:39:19
Ich schlage mal folgendes vor:
Select count(*), Wohnort from Einwohner group by Wohnort having count(*)>10000;
Disconnected
2013-10-14, 15:00:05
Um die Topicfrage mal zu beantworten: Aggregatfunktionen und WHERE geht nicht. HAVING oder ein Subquery wäre eine Möglichkeit.
Matrix316
2013-10-14, 15:20:15
Ich schlage mal folgendes vor:
Select count(*), Wohnort from Einwohner group by Wohnort having count(*)>10000;
oder
select count(Wohnort), Wohnort from Einwohner group by Wohnort having count(Wohnort) > 10000
BodyLove
2013-10-14, 15:22:37
Danke euch! Hat super geklappt. Jetzt fehlt mir nur noch eins:
Ich brauche jetzt sowas:
Update Mitarbeiter set Arbeitsort = (Random(select Wohnort from Einwohner group by Wohnort having count(*) > 10000)) ;
Muss wohl mit PL/SQL mich anfreunden.
ManuelCalavera
2013-10-14, 15:44:45
Ich weiss nicht so recht ob das wirklich funktioniert, und ob es performance technisch eine gute Idee ist, aber probier mal:
Update Mitarbeiter set Arbeitsort = (select Wohnort from (select count(Wohnort), Wohnort, dbms_random.value as sortcol from Einwohner group by Wohnort having count(Wohnort) > 10000 order by sortcol) where rownum=1)
Danach haben alle Mitarbeiter den gleichen Arbeitsort, wenn jeder Mitarbeiter einen anderen haben soll brauchst du mMn etwas mehr als eine einzelne Query.
vBulletin®, Copyright ©2000-2025, Jelsoft Enterprises Ltd.