如何找到每个国家/地区的人数
人员表
country_id,fName,lName
国家/地区表
country_id,country_name
我可以使用以下SQL语句
找到每个国家/地区的人数及其国家/地区IDselect
p.country_id, COUNT(p.country_id) as [Count]
from
persons p
GROUP BY
p.country_id
但是如果我想获取country_name而不是country_id呢? 我到目前为止尝试了这个,但它没有按预期工作,所以我在这里遗漏了一些东西。
select
c.country_name, COUNT(p.country_id) as [Count]
from
persons p INNER JOIN countries c ON p.country_id = c.country_id
GROUP BY
p.country_id
SQL Server 2000
答案 0 :(得分:2)
GROUP BY
SELECT
中的列:
SELECT c.country_name, COUNT(p.country_id) as [Count]
FROM persons p INNER JOIN
countries c
ON p.country_id = c.country_id
GROUP BY c.country_name;
注意:
GROUP BY
中同时包含ID和名称 - 如果两个国家/地区名称相同,就会发生这种情况。COUNT(*)
代替COUNT(p.country_id)
。计算行而不是NULL
- 值。如果您想要所有国家/地区,即使是那些没有人的国家/地区,那么您也会使用外部JOIN
:
SELECT c.country_name, COUNT(p.country_id) as [Count]
FROM countries c LEFT JOIN
persons p
ON p.country_id = c.country_id
GROUP BY c.country_name;
答案 1 :(得分:0)
您需要提及select
中提到的column_name。
select
c.country_name, COUNT(p.country_id) as [Count]
from
persons p INNER JOIN countries c ON p.country_id = c.country_id
GROUP BY
c.country_name
答案 2 :(得分:0)
您可以按c.country_name使用group ..您在select中使用的列,您可以用来引用该组
select c.country_name, COUNT(p.country_id) as [Count]
from persons p INNER JOIN countries c ON p.country_id = c.country_id
GROUP BY c.country_name
答案 3 :(得分:0)
SQL语句是正确的。数据库中存在一些数据损坏,导致结果无法正确返回。