在使用 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);
备注:
- 关键是在
select
和 group 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
我正在尝试为我的学校项目按省份计算患者人数,我设法在 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);
备注:
- 关键是在
select
和group 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