Je vais essayer de faire un graphique à partir des données de ma base de données SQL Server. J'aurai toutes les rues avec le nombre d'utilisateurs qui vivent dans cette rue, même le nombre est nul.
Pour cela, j'ai essayé cette requête:
Create table Streets(
ID int IDENTITY primary key,
Name varchar(100)
);
create table users(
ID int IDENTITY primary key,
Username varchar(100),
StreetID int references Streets(id)
);
insert into streets values ('1st street'), ('2nd street'), ('3rd street'),
('4th street'), ('5th street');
insert into users values ('Pol', 1), ('Doortje', 1), ('Marc', 2), ('Bieke', 2),
('Paulien', 2), ('Fernand', 2), ('Pascal', 2), ('Boma', 3),
('Goedele', 3), ('Xavier', 4);
select s.name as street, count(s.name) as count
from users u inner join streets s on u.streetid = s.id
group by s.name
Et ça me donne cette sortie:
| | street | count |
| - | ---------- | ----- |
| 1 | 1st street | 2 |
| 2 | 2nd street | 5 |
| 3 | 3rd street | 2 |
| 4 | 4th street | 1 |
Le problème est que la 5ème rue, où aucun utilisateur ne vit, n'apparaît pas sur le résultat. Puis-je faire cela avec SQL Server? Ici tu as un violon
Mise à jour: si je le fais right join
, j'ai ce résultat:
| | street | count |
| - | ---------- | ----- |
| 1 | 1st street | 2 |
| 2 | 2nd street | 5 |
| 3 | 3rd street | 2 |
| 4 | 4th street | 1 |
| 5 | 5th street | 1 |
right join
et ce right outer join
sont les mêmes choses. J'ai ajouté une explication dans ma réponse comme suggéré par @ jpmc26.
COUNT(u.streetid)