Sql 计算值并将其分组,但不包含空值

Sql 计算值并将其分组,但不包含空值,sql,postgresql,Sql,Postgresql,如何在不包含“0”值的情况下合并这些值 SELECT DATE_PART('YEAR', BIRTHDATE), SUM(CASE WHEN GENDER = 'M' THEN 1 ELSE 0 END) MAN, SUM(CASE WHEN GENDER = 'F' THEN 1 ELSE 0 END) as FEMALE FROM TABLE GROUP BY 1 我的输出 YEAR MAN FEMALE 1970 2 0 1970 0 5 1971

如何在不包含“0”值的情况下合并这些值

SELECT DATE_PART('YEAR', BIRTHDATE), SUM(CASE WHEN GENDER  = 'M' THEN 1 ELSE 0 END) MAN,
SUM(CASE WHEN GENDER = 'F' THEN 1 ELSE 0 END) as FEMALE FROM TABLE
GROUP BY 1
我的输出

YEAR   MAN   FEMALE
1970   2      0
1970   0      5
1971   3      0
1971   0      2
期望输出

YEAR   MAN  FEMALE
1970    2    5
1971    3    2

我已经尝试了另一个男人和女人的计数,但这不起作用。

你的查询应该可以,尽管我建议写为:

SELECT DATE_PART('YEAR', BIRTHDATE) as year,
       COUNT(*) FILTER (WHERE GENDER  = 'M') as MAN,
       COUNT(*) FILTER (WHERE GENDER  = 'F') as FEMALE
FROM TABLE
GROUP BY year;
您的结果表明您确实在使用以下内容:

GROUP BY 1, gender

您只需通过语法纠正您的分组

Group By DATE_PART('YEAR', BIRTHDATE)

我发现很难相信您的查询会返回指定的输出。您完全正确,这就是问题所在。我认为这不是一个大问题,如果我把我的性别也包括在内的话(我在上面的例子中没有写)