Postgresql
如何將一列的多個值計為一組?
我有一個
main
包含以下行的表:id | name | rank ----+--------+------ 1 | Ali | a 2 | Sami | b 3 | Khan | c 4 | Kamran | d 5 | Imran | e 6 | Asad | a 7 | Nawid | v 8 | Jamil | c 9 | Usman | j
我想計算 column 中具有某些值的行
rank
。例如,我想按如下方式對值進行分組:
- 值
(a,b,v)
應該按名稱歸為一組myvalues
。- 值
(c,d,j)
應該按名稱進入另一組yourvalues
。- 值
(e)
應該按名稱傳遞給另一個組extravalues
。我想要的結果:
myvalues | yourvalues | extravalues 4 | 4 | 1
myvalues
計數為 4,因為它由 (a,b,v) 組成。a 出現 2 次,b 出現 1 次,v 出現 1 次 - 共 4次。由 (c,d,j) 組成的情況也是如此
yourvalues
,這些值的出現總共為 4。最後一組
extravalues
由 (e) 組成,僅計算 1 行。
FILTER
在 Postgres 9.4+ 中使用聚合子句:SELECT count(*) FILTER (WHERE rank = ANY ('{a,b,v}')) AS myvalues , count(*) FILTER (WHERE rank = ANY ('{c,d,j}')) AS yourvalues , count(*) FILTER (WHERE rank = 'e') AS extravalues FROM main;
舊版本的詳細資訊和替代方案: