2016-05-14 8 views
0
select distinct hash, title, count(*) as c 
from pastes 
where hash is not null 
group by hash, title 
order by c desc; 

Ich bin in der Lage, die Ergebnisse dieser Abfrage basierend auf der Spalte "c" zu sortieren, die ich während der Abfrage definiert habe.Wie verwendet man ein Aggregat in meiner WHERE-Klausel

Aber ich möchte auch c zu der WHERE-Klausel hinzufügen:

select distinct hash, title, count(*) as c 
from pastes 
where c > 10 and hash is not null 
group by hash, title 
order by c desc; 

ERROR: column "c" does not exist 
LINE 1: ...inct hash, title, count(*) as c from pastes where c > 10 and... 
                  ^

Was ist der richtige Weg, um eine Abfrage wie folgt angeben?

Antwort

2

Bedingungen auf Aggregate werden durchgeführt unter Verwendung having

select hash, title, count(*) as c 
from pastes 
where hash is not null 
group by hash, title 
having count(*) > 10 
order by c desc; 
0

könnten Sie wickeln einfach es als Unterabfrage:

select q.* from (
select hash, title, count(*) as c 
from pastes where hash is not null 
group by hash, title 
) q 
where q.c > 10 
order by q.c desc; 

Sie die Unterabfrage überspringen könnte und HAVING verwenden, wo dagegen, aber ich sehe, Sie müssen auch durch C BESTELLEN, damit die Unterabfrage.

+0

Die HAVING Subklausel scheint mit der Bestellung von c zu arbeiten. – user3556757

Verwandte Themen