Complete worked example
sql
CREATE TABLE companies(id TEXT PRIMARY KEY);
CREATE TABLE roles(id TEXT PRIMARY KEY, company TEXT);
INSERT INTO companies VALUES ('A'), ('B');
INSERT INTO roles VALUES ('r1','A'), ('r2','A');
SELECT c.id, COUNT(r.id) AS roles
FROM companies c LEFT JOIN roles r ON r.company=c.id
GROUP BY c.id ORDER BY c.id;- Reasoning
- The left join preserves B while counting only matched role ids.