I’m trying to query in PostgresQL using the SUM function to get the total of 3 different row types (Root, Dynamic, Test). I used the Sum() function for the first attempt and the Count() function for the second attempt; both didn’t work sadly. I expect a syntax error (since I’m a beginner at using SQL), but I’m not sure what it is and how to fix it!
1st attempt with the Sum() function:
x
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"
2nd attempt with the Count() function:
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
Can I please get help with this? Thank you 🙂
Advertisement
Answer
Consider using the filter
syntax to aggreagate functions, which is standard SQL and that Postgres supports:
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
If you were to write this without the filter
syntax (as in your first attempt), a portable syntax is:
select
sum(case when "exerciseType" = 'ROOT' then 1 else 0 end) as total_root_exercises,
sum(case when "exerciseType" = 'DYNAMIC' then 1 else 0 end) as total_Dynamic_exercises,
sum(case when "exerciseType" = 'TEST' then 1 else 0 end) as total_test_exercises
FROM exer