SQL-计算一个属性,按另一个属性分组

SQL-计算一个属性,按另一个属性分组,sql,postgresql,Sql,Postgresql,我有一张桌子staff staff pt | ward P | 1 P | 1 T | 1 P | 2 T | 2 我想制作一个表格,计算每个病房有多少个p's和T's,如下所示: staff ward | P | T 1 | 2 | 1 2 | 1 | 1 我试过这个 WITH cte(ward, P, T) AS( SELECT ward, (SELECT COUNT(PT) FROM staff WHERE PT = 'P' ), (SELECT COUNT(PT

我有一张桌子
staff

staff
pt | ward
P  | 1
P  | 1
T  | 1
P  | 2
T  | 2
我想制作一个表格,计算每个病房有多少个p's和T's,如下所示:

staff
ward | P | T
1    | 2 | 1
2    | 1 | 1
我试过这个

WITH cte(ward, P, T) AS(
SELECT ward,
(SELECT COUNT(PT) FROM staff WHERE PT = 'P' ),
(SELECT COUNT(PT) FROM staff WHERE PT = 'T' ) FROM staff GROUP BY ward)
SELECT * FROM cte
但是我得到了这张桌子

staff
ward | P | T
1    | 3 | 2
2    | 2 | 2

任何帮助都将不胜感激

使用条件聚合:

select ward, sum( (pt = 'P')::int ) as p, sum ( (pt = 'T')::int ) as t
from t
group by ward;

案例陈述将在这里起作用:

SELECT
    ward,
    SUM(CASE WHEN pt = P THEN 1 ELSE 0 END) AS P,
    SUM(CASE WHEN pt = T THEN 1 ELSE 0 END) AS T
FROM
    table
GROUP BY
    ward