You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

SQL技术问询:在staff表中按ward分组统计P和T的数量

解决按Ward统计P和T数量的SQL问题

嗨,咱们来搞定你那张staff表按病房统计P和T数量的SQL问题!首先我先默认你的表至少包含两个核心字段:ward(病房标识)和type(员工类型,值为'P'或'T')——如果你的字段名不一样,直接对应替换就行。

方法1:用COUNT + CASE语句(直观易懂)

这是最常用的写法之一,通过CASE判断类型,COUNT统计符合条件的有效行数:

SELECT
    ward,
    COUNT(CASE WHEN type = 'P' THEN 1 END) AS p_count,
    COUNT(CASE WHEN type = 'T' THEN 1 END) AS t_count
FROM staff
GROUP BY ward
ORDER BY ward;

逻辑说明:当type等于'P'时,CASE返回1,否则返回NULL;而COUNT函数会自动忽略NULL值,所以最终统计的就是该病房下P类型员工的数量,T类型的统计逻辑完全一致。

方法2:用SUM + CASE语句(灵活通用)

另一种常用思路是用SUM来累加符合条件的记录:

SELECT
    ward,
    SUM(CASE WHEN type = 'P' THEN 1 ELSE 0 END) AS p_count,
    SUM(CASE WHEN type = 'T' THEN 1 ELSE 0 END) AS t_count
FROM staff
GROUP BY ward
ORDER BY ward;

逻辑说明:当type是'P'时返回1,否则返回0,SUM把这些数值累加起来,得到的就是该类型的总数量。这种写法和COUNT的效果完全一样,选你看着顺眼的用就行。

如果还是有问题?

要是上面的写法没达到你预期的效果,或者你想知道自己之前写的SQL哪里出了错,可以把你的旧SQL代码贴出来,再补充下你的表结构细节(比如字段名、部分数据样例),这样我就能更精准地帮你排查问题啦!

内容的提问来源于stack exchange,提问作者tomoswizzard

火山引擎 最新活动