在使用 count 语句时用另一个 table 中的名称替换一列的 ID?

Replace Id of one column by a name from another table while using the count statement?

我正在尝试为我的学校项目按省份计算患者人数,我设法在 table 中获得了省份的人数和 ID,但由于我使用的是计数语句不会让我使用 join 来显示 ProvinceName 而不是 Id(它说它不是数字)。

这是我正在谈论的两个 table 的架构

省table内容如下:

ProvinceId ProvinceName ProvinceShortName
1 Terre-Neuve-et-Labrador NL
2 Île-du-Prince-Édouard PE
3 Nouvelle-Écosse NS
4 Nouveau-Brunswick NB
5 Québec QC
6 Ontario ON
7 Manitoba MB
8 Saskatchewan SK
9 Alberta AB
10 Colombie-Britannique BC
11 Yukon YT
12 Territoires du Nord-Ouest NT
13 Nunavut NU

这里是患者的 n 个样本数据table(别担心这是假数据!):

SS FirstName LastName InsuranceNumber InsuranceProvince DateOfBirth Sex PhoneNumber
2 Doris Patel PATD778276 5 1977-08-02 F 514-754-6488
3 Judith Doe DOEJ7712917 5 1977-12-09 F 418-267-2263
4 Rosemary Barrett BARR05122566 6 2005-12-25 F 905-638-5062
5 Cody Kennedy KENC047167 10 2004-07-01 M 604-833-7712

我使用以下语句设法按省份计算了患者人数:

select count(SS),InsuranceProvince
from Patient
full JOIN Province ON Patient.InsuranceProvince = Province.ProvinceId    
group by InsuranceProvince

这给了我以下 table:

PatientCount InsuranceProvince
13 1
33 2
54 3
4 4
608 5
1778 6
25 7
209 8
547 9
649 10
6 11
35 12
24 13

如何将 ID 替换为正确的 ProvinceShortName 以获得以下最终结果?

ProvinceName PatientCount
NL 13
PE 33
NS 54
NB 4
QC 608
ON 1778
MB 25
SK 209
AB 547
BC 649
YT 6
NT 35
NU 24

提前致谢!

所以您实际上可以在 select 中指定它。请注意,最好将您分组的内容包含在 select 中,但由于您的问题非常具体,那么...

SELECT ProvinceShortName, COUNT(SS) AS PatientsInProvince
FROM Patient
    JOIN Province ON Patient.InsuranceProvince=Province.ProvinceId
GROUP BY InsuranceProvince;

我建议:

select pr.ProvinceShortName, count(*)
from Patient p join
     Province pr
     on p.InsuranceProvince = pr.ProvinceId    
group by pr.ProvinceShortName
order by min(pr.ProvinceId);

备注:

  • 关键是在 selectgroup by 中包含您想要的列。
  • 您似乎想要按省份编号顺序排列的结果,所以我添加了一个 order by
  • 不需要统计SS的非NULL值。你不妨使用 count(*).
  • Table 别名使查询更易于编写和阅读。

我假设您需要按省份显示患者人数。

SELECT 
  Province.ProvinceShortName AS [ProvinceName]
 ,COUNT(1) as [PatinetCount] 
FROM Patient
  RIGHT JOIN Province ON Patient.InsuranceProvince = Province.ProvinceId    
GROUP BY  ProvinceShortName

只需将您的查询更改为

select ProvinceShortName As PatientCount,count(InsuranceProvince) As PatientCount
from Patient
full JOIN Province ON Patient.InsuranceProvince = Province.ProvinceId    
group by ProvinceShortName