与SQL相关的count()查询
我有4张桌子:与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时) 这样做是为了避免冗余 我的问题是: 如何使用添
国家/地区
:
- 身份证
- 名字
地区
:
- 身份证
- 名字
- 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因为当用户连接到某个国家时,他会加入到该国家的每一行,即该国家的每一个地区和地区。