聚合函数将条件作为参数?[复制]

Aggregate function taking a condition as argument? [duplicate]

提问人:PeteyPablo 提问时间:3/17/2023 最后编辑:Dale KPeteyPablo 更新时间:3/17/2023 访问量:108

问:

我正在做一些SQL练习题,发现了一个问题,其中一个替代解决方案让我感到困惑。

问题简化如下:

显示标识为“M”的患者多于“F”的省份 ID。

名为“patients”的表具有相关的列 patient_id、province_id 和性别(“M”或“F”)。

我不明白这个给定的解决方案,即使它适用于运行 SQL 的网站(网站上的版本未知,www.sql-practice.com 供参考)。

SELECT province_id
FROM patients
GROUP BY province_id
HAVING SUM(gender = 'M') > SUM(gender = 'F')

在解决方案的部分中,为什么此程序允许您在聚合的括号内指定条件?这是我不习惯的特定 SQL 版本吗?我使用不同的数据集在我的桌面应用程序 SQL Server 上尝试了这种构造,但出现语法错误,我认为如果您尝试在聚合函数中设置条件,就会发生这种情况。HAVING

由于我问题的性质,尝试解决这个问题是不适用的,因为我正在寻求一种显然有效但在任何地方都没有文档的替代解决方案的澄清,我也找不到任何人在 StackOverflow 上询问它。

sql-server 语法错误 聚合 函数 条件格式

评论

1赞 Dale K 3/17/2023
它显然是针对另一个RDBMS的......
0赞 nbk 3/17/2023
这在 MySQL 中工作得很好,因为比较返回 1 表示 true,返回 0 表示 false,这肯定属于 sql 标准 imo
0赞 Charlieface 3/17/2023
顺便说一句,在这种情况下使用比COUNTSUM
0赞 siggemannen 3/17/2023
mssql 执行此操作的方式是“性别 ='m' 时的情况,则 1 否则 0 结束”

答: 暂无答案