GROUP BY与JOIN没有给出正确的结果

时间:2017-11-14 12:21:09

标签: sql sql-server sql-server-2000

如何找到每个国家/地区的人数

人员表

  

country_id,fName,lName

国家/地区表

  

country_id,country_name

我可以使用以下SQL语句

找到每个国家/地区的人数及其国家/地区ID
select   
 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

4 个答案:

答案 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语句是正确的。数据库中存在一些数据损坏,导致结果无法正确返回。