CREATE TABLE projects ( id INT PRIMARY KEY, title VARCHAR ); INSERT INTO projects VALUES (2, 'Canape CRM'), (3, 'Master'), (1, 'Canape CMS'); CREATE TABLE statuses ( id INT PRIMARY KEY, title VARCHAR ); INSERT INTO statuses VALUES (7, 'Deploying'), (1, 'Updating'), (2, 'Backup'), (3, 'OK'), (6, 'Error'); CREATE TABLE tasks ( id serial PRIMARY KEY, project_id INT REFERENCES projects (id), status_id INT REFERENCES statuses (id) ); INSERT INTO tasks (project_id, status_id) VALUES (2, 2), (2, 1), (2, 1), (1, 1), (2, 1), (1, 2), (1, 1), (1, 7), (1, 2), (1, 1), (1, 1), (1, 1), (3, 1), (1, 7), (1, 1), (1, 6), (1, 3), (2, 2), (1, 7), (1, 2), (1, 2), (1, 7), (1, 7), (1, 7), (1, 7), (3, 7), (1, 2), (3, 1), (2, 1), (1, 2), (1, 1), (3, 1), (3, 2), (1, 1), (1, 1), (1, 1), (2, 1), (1, 1), (1, 1), (3, 1), (1, 2), (1, 1), (3, 1), (1, 6), (1, 3), (1, 1), (1, 1), (1, 7), (1, 6), (3, 1), (1, 1), (1, 2), (1, 7), (3, 2), (1, 1), (1, 6), (1, 6), (2, 1), (1, 2), (1, 1), (1, 1), (2, 1), (1, 1), (2, 1), (1, 7), (1, 1), (2, 1), (1, 7), (1, 1), (1, 2), (2, 1), (2, 6), (2, 1), (1, 7), (1, 1), (2, 1), (1, 2), (1, 2), (2, 1), (1, 7); SELECT projects.title, statuses.title, COUNT( CASE WHEN tasks.project_id = projects.id AND tasks.status_id = statuses.id THEN 1 END ) FROM projects JOIN tasks ON projects.id = tasks.project_id JOIN statuses ON statuses.id = tasks.status_id GROUP BY projects.title, statuses.title ORDER BY projects.title;