2017-04-20 3 views
0

Ich habe eine große Tabelle mit Zeile, die jeweils eine Standort-ID (location_id) haben. In der Spalte location_id gibt es mehrere Instanzen desselben Werts. Ich möchte zählen, wie oft jeder Wert angezeigt wird und dann diesen Wert in einen "Bucket" setzenPostgres COUNT Instanzen und in "Eimer"

Ich habe das versucht, aber endete mit allem im "500+" Eimer.

SELECT 
CASE WHEN count(location_id) > 1 AND count(location_id) <= 25 THEN '1-25' 
WHEN count(location_id) > 25 AND count(location_id) <= 500 THEN '26-500' 
WHEN count(location_id) > 500 THEN '500+' 
ELSE 'nothing' 
end as bucket, 
count(*) as Column1 
FROM myTable 

Was mache ich hier falsch?

Antwort

2

Sie möchten zwei Aggregationsebenen:

SELECT (CASE WHEN cnt <= 25 THEN '1-25' 
      WHEN cnt <= 500 THEN '26-500' 
      ELSE '500+' 
     END) as bucket, COUNT(*) as numlocations, SUM(cnt) as numTotal 
FROM (SELECT location_id, count(*) as cnt 
     FROM myTable 
     GROUP BY location_id 
    ) l 
GROUP BY bucket 
ORDER BY MIN(cnt); 
+0

Dank! Ich denke, das funktioniert perfekt. Ich habe jedoch 3 Spalten und ich bin nicht ganz sicher, was sie bedeuten. Der erste ist "Eimer", was klar ist. Was sind 'numlocations' und' numTotal'? – jonmrich

1

Versuchen Sie folgendes: -

Select 
    CASE WHEN #_cnt >= 1 AND #_cnt<= 25 THEN '1-25' 
    WHEN #_cnt > 25 AND #_cnt <= 500 THEN '26-500' 
    WHEN #_cnt > 500 THEN '500+' 
    ELSE 'nothing' 
    end as bucket, 
    count(*) as column1 
    from 
    (
    Select location_id, count(*) as #_cnt 
    from 
    myTable 
    group by location_id 
    ) a 
group by bucket 

Danke :-)

+0

Dies wird nicht nach Bucket gruppiert. Ich sollte nur mit 3 Zeilen enden, aber das ist nicht, was ich bekomme. – jonmrich

+0

repariert es. Überprüfen Sie bitte und lassen Sie mich wissen, wenn es immer noch Fragen rund um diese –

+0

Ich bin ein bisschen verwirrt darüber, was hier passiert ist. Theoretisch sollte der 'nothing'-Bucket leer sein, da alles, was gezählt wird, mindestens eine Zahl von 1 hat. Sie zählen für die Eimer 500+ und 25-500, die mit der Antwort von @ Gordon übereinstimmen, aber die anderen beiden nicht. – jonmrich

Verwandte Themen