我在PostgreSQL中有一个名为Students的表。在该表中,我有StudId, StudName
和Gender
列。我希望在一个函数中的单个结果集中获得表中男女学生的数量。
StudId StudName Gender
101 Peter M
102 George M
103 Mary F
104 Rose F
我已经使用SQL Server和MySQL完成了这项工作。但是我对PostgreSQL没有任何想法。
我是PostgreSQL的新手,有人帮助找到结果。谢谢你的建议。
答案 0 :(得分:2)
使用两个这样的子选择
select (select count(*) cnt_male from tbl where gender='M')
,(select count(*) cnt_female from tbl where gender='F')
或
您可以在case
这样的功能中使用count()
select count(case when gender='M' then 1 end) cnt_male
,count(case when gender='F' then 1 end) cnt_female
from tbl
结果:
cnt_male cnt_female
-------- ----------
2 2
编辑:
根据操作update
create function fn_gender_cnt() returns table(tot_male bigint,tot_female bigint)
as
$$
select count(case when gender='M' then 1 end) cnt_male
,count(case when gender='F' then 1 end) cnt_female
from tbl
$$
language sql
用法:
select * from fn_gender_cnt();
结果:
tot_male tot_female
-------- ----------
2 2