与SQL相关的count()查询

与SQL相关的count()查询,sql,count,Sql,Count,我有4张桌子: 国家/地区: 身份证 名字 地区: 身份证 名字 fk_国家 部门: 身份证 名字 fk_地区 用户: 身份证 fk_国家 fk_地区 fk_系 user表只有一个外键集(其他外键集应为空) 我们不必设置外键fk_pays,因为我们可以通过fk_dept.fk_region.fk_country(设置fk_dept时)触摸country表 或 通过fk_region.fk_country(设置了fk_region时) 这样做是为了避免冗余 我的问题是: 如何使用添

我有4张桌子:

国家/地区

  • 身份证
  • 名字
地区

  • 身份证
  • 名字
  • fk_国家
部门

  • 身份证
  • 名字
  • fk_地区
用户

  • 身份证
  • fk_国家
  • fk_地区
  • fk_系
user
表只有一个外键集(其他外键集应为空)

我们不必设置外键
fk_pays
,因为我们可以通过
fk_dept.fk_region.fk_country
(设置
fk_dept
时)触摸
country

通过
fk_region.fk_country
(设置了
fk_region
时)

这样做是为了避免冗余

我的问题是:

如何使用添加的列获取所有国家/地区信息,该列包含该国家/地区的用户数(
COUNT
)?

我知道如何使用不同的付款请求(使用
COALESCE
),但我希望在一个单独的付款请求中执行此操作。

尝试以下操作:

SELECT count(user.id), country.name, region.name, dept.name FROM user
   JOIN country ON user.fk_country = country.id
   JOIN region ON region.fk_country = country.id
   JOIN dept ON dept.fk_region = region.id
       GROUP BY country.id
只是使用或加入

SELECT c.id, c.name, count(DISTINCT u.id)
FROM country AS c
JOIN region AS r ON c.id=r.fk_country
JOIN dept AS d ON r.id=d.fk_region
JOIN users AS u ON u.fk_country=c.id OR u.fk_region=r.id OR u.fk_dept=d.id
GROUP BY c.id,c.name;

我没有尝试任何东西,它看起来很复杂(添加不同的
COUNT
query)
select country.*,COUNT(user.id)from country,user where country.id=user.fk_country group by country.id
我不想做一个简单的
COUNT
查询假设设置了
user.fk_country
,但并非总是如此。此外,接下来两个连接的目的是什么?(除了选择列?)如果用户与任何国家/地区都没有关联,您希望用户计数是多少。它进行内部联接,这意味着它统计所提供国家/地区的用户数。加入是为了选择“完整”信息,如您标记的答案所示。我没有注意到你在用户表中有所有的fk。最后没有那么复杂,smart:)@Leto实际上它工作不正常。现在应该没问题了。为什么一个用户会被多次抓取?@Leto因为当用户连接到某个国家时,他会加入到该国家的每一行,即该国家的每一个地区和地区。