Postgresql

如何將一列的多個值計為一組?

  • June 28, 2020

我有一個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;

舊版本的詳細資訊和替代方案:

引用自:https://dba.stackexchange.com/questions/134868