Saya akan mencoba membuat grafik dari data dari database SQL server saya. Saya akan memiliki semua jalan dengan jumlah pengguna yang tinggal di jalan ini bahkan hitungannya nol.
Untuk ini, saya sudah mencoba kueri ini:
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
Dan itu memberi saya hasil ini:
| | street | count |
| - | ---------- | ----- |
| 1 | 1st street | 2 |
| 2 | 2nd street | 5 |
| 3 | 3rd street | 2 |
| 4 | 4th street | 1 |
Masalahnya adalah bahwa jalan ke-5, tempat tidak ada pengguna yang hidup, tidak muncul pada hasilnya. Bisakah saya melakukan ini dengan SQL server? Di sini Anda punya biola
Pembaruan: Jika saya melakukannya right join
, saya mendapatkan hasil ini:
| | street | count |
| - | ---------- | ----- |
| 1 | 1st street | 2 |
| 2 | 2nd street | 5 |
| 3 | 3rd street | 2 |
| 4 | 4th street | 1 |
| 5 | 5th street | 1 |
sql-server
join
group-by
H. Pauwelyn
sumber
sumber
COUNT(u.streetid)
right join
danright outer join
merupakan hal yang sama. Saya memang menambahkan penjelasan dalam jawaban saya seperti yang disarankan oleh @ jpmc26.Jawaban:
Alasan kueri Anda tidak berfungsi seperti yang dimaksudkan:
Gabungan dalam memberi Anda persimpangan 2 tabel. Dalam kasus Anda, tidak ada entri untuk
5th street
di tabel pengguna Anda dan itulah sebabnya bergabung tidak menghasilkan entri apa pun untuk itu.Gabung luar (kanan atau kiri) akan memberikan hasil gabung dalam dan di samping itu semua catatan yang tidak memenuhi syarat dari tabel kiri atau kanan tergantung pada jenis (kiri atau kanan) gabung luar.
Dalam hal ini, saya meletakkan Street di sebelah kiri gabungan dan menggunakan gabungan luar kiri seperti yang Anda inginkan semua jalan (bahkan hitungan nol) di kumpulan hasil Anda.
Ubah kueri pemilihan Anda menjadi ini.
Hasil
sumber
Ini adalah salah satu cara yang mungkin.
sumber
Membersihkan kode agar berfungsi pada instance case sensitif ...
Saat Anda menggunakan
COUNT
dengan nama kolom, itu menghitungNOT NULL
nilai.Saya menggunakan di
RIGHT JOIN
sini untuk menenangkan Joe Obbish.Hasil:
sumber
Ini pertanyaan singkatnya:
sumber