首页 > 解决方案 > 使用 Sum() 和 count() 函数的 SQL 查询

问题描述

我正在尝试使用 SUM 函数在 PostgresQL 中进行查询,以获取总共 3 种不同的行类型(根、动态、测试)。我第一次尝试使用 Sum() 函数,第二次尝试使用 Count() 函数;可悲的是,两者都没有工作。我预计会出现语法错误(因为我是使用 SQL 的初学者),但我不确定它是什么以及如何修复它!

Sum() 函数的第一次尝试:

SELECT 
sum(case when "exerciseType" = 'ROOT') as total_root_exercises, 
sum(case when "exerciseType" = 'DYNAMIC') as total_dynamic_exercises,
sum(case when "exerciseType" = 'TEST') as total_test_exercises
FROM exer 
GROUP BY "exerciseType"

第二次尝试使用 Count() 函数:

select 
count(*) as total_root_exercises
where "exerciseType" = 'ROOT',
count(*) as total_Dynamic_exercises
where "exerciseType" in('DYNAMIC'),
count(*) as total_test_exercises
where "exerciseType" in('TEST')
FROM exer

我能得到这方面的帮助吗?谢谢 :)

标签: sqlpostgresqlcountsumpivot

解决方案


您可以filter用于条件聚合:

SELECT count(*) filter (where "exerciseType" = 'ROOT') as total_root_exercises, 
       count(*) filter (where "exerciseType" = 'DYNAMIC') as total_dynamic_exercises,
       count(*) filter (where "exerciseType" = 'TEST') as total_test_exercises
FROM exer ;

您不需要外部聚合,尽管您可以更简单地以行而不是列的形式返回结果:

select "exerciseType", count(*)
from exer
group by "exerciseType";

注意:我强烈反对使用转义的列名。定义表时不要使用双引号,也不要在查询中使用它们。


推荐阅读