Intentaré hacer un gráfico a partir de los datos de mi base de datos del servidor SQL. Tendré todas las calles con el recuento de los usuarios que viven en esta calle, incluso el recuento es cero.
Para esto he intentado esta consulta:
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
Y me da esta salida:
| | street | count |
| - | ---------- | ----- |
| 1 | 1st street | 2 |
| 2 | 2nd street | 5 |
| 3 | 3rd street | 2 |
| 4 | 4th street | 1 |
El problema es que la 5ta calle, donde no vive ningún usuario, no aparece en el resultado. ¿Podría hacer esto con el servidor SQL? Aquí tienes un violín
Actualización: si lo hago right join
, tengo este resultado:
| | street | count |
| - | ---------- | ----- |
| 1 | 1st street | 2 |
| 2 | 2nd street | 5 |
| 3 | 3rd street | 2 |
| 4 | 4th street | 1 |
| 5 | 5th street | 1 |
right join
y right outer join
son las mismas cosas. Agregué una explicación en mi respuesta según lo sugerido por @ jpmc26.
COUNT(u.streetid)