Sql-Server

如何獲得計數為零的組?

  • January 12, 2022

我將嘗試根據我的 SQL 伺服器數據庫中的數據製作圖表。即使計數為零,我也會擁有所有街道以及居住在這條街道上的使用者的數量。

為此,我嘗試了以下查詢:

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

它給了我這個輸出:

問題是沒有使用者居住的第 5 街沒有出現在結果中。我可以用 SQL Server 做到這一點嗎?在這裡你有一個小提琴

**更新:**如果我這樣做right join,我得到了這個結果:

看到這個小提琴。

您的查詢未按預期工作的原因:

內連接為您提供 2 個表的交集。在您的情況下,您的 users 表中沒有條目,5th street這就是 join 沒有為此生成任何條目的原因。

外連接(右或左)將根據外連接的類型(左或右)給出內連接的結果以及來自左表或右表的所有非限定記錄。

在這種情況下,我將 Street 放在連接的左側並使用左外連接,因為您希望結果集中的所有街道(即使計數為零)。

將您的選擇查詢更改為此。

SELECT S.Name AS Street,
      Count(U.Username) AS COUNT
FROM Streets S
LEFT OUTER JOIN Users U ON U.Streetid = S.Id
GROUP BY S.Name

結果 在此處輸入圖像描述

引用自:https://dba.stackexchange.com/questions/174694