对SQL语句的查询结果增加一列条件汇总

有语句的查询结果,类似如下:
select xm,nd,jd,dc from .........
结果如下:

xm nd jd dc
张三 2022 一季度 好
张三 2022 二季度 好
张三 2022 三季度 一般
张三 2022 四季度 较好
李四 2022 一季度 好
李四 2022 二季度 一般
李四 2022 三季度 一般
李四 2022 四季度 一般
王五 2022 一季度 较好
王五 2022 二季度 好
王五 2022 三季度 好
王五 2022 四季度 一般
希望在显示字段中,增加一列,为zs,显示出每个人的“好”的数量。
如何写该语句?

ORACLE?可以这样试试

SELECT xm,nd,jd,dc,
  COUNT(CASE WHEN dc='好' THEN 1 END) OVER (PARTITION BY xm) AS zs
FROM table;

你这里有一个误区,对于较好的情况并没有做出说明

参考GPT和自己的思路:可以尝试使用如下的SQL语句:

SELECT xm, nd, jd, dc,
SUM(CASE WHEN dc='好' THEN 1 ELSE 0 END) AS zs
FROM 表名
GROUP BY xm, nd, jd, dc;

其中,SUM函数和CASE语句结合可以实现对'好'的数量进行汇总,然后再按照xm, nd, jd, dc进行分组。最后查询出来的结果会包含新增的一列zs,即每个人的“好”的数量。