Aggregate Expressions with FILTER in Postgresql
Today I learned to use FILTER
on aggregate expressions such as COUNT
in postgresql.
See this example:
SELECT u.login,
COUNT(1) FILTER (WHERE r.language ilike 'ruby') as ruby,
COUNT(1) FILTER (WHERE r.language ilike 'javascript') as js,
COUNT(1) FILTER (WHERE r.language ilike 'elixir') as elixir,
COUNT(1) as all_langs
FROM users u
LEFT JOIN repositories r ON (u.id = r.user_id)
GROUP BY u.id;
-- login | ruby | js | elixir | all_langs
---------+------+----+--------+------------
-- bill | 5 | 2 | 3 | 15
-- karen | 2 | 7 | 4 | 19
-- bob | 9 | 1 | 2 | 23
h/t @joshuadavey
Tweet