SQL相关的棘手count()查询

时间:2013-03-06 12:33:28

标签: sql count

我有4张桌子:

country

  • ID
  • 名称

region

  • ID
  • 名称
  • fk_country

dept

  • id
  • 名称
  • fk_region

user

  • ID
  • fk_country
  • fk_region
  • fk_dept

user表只有一个外键集(其他外键应为空)。

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

OR

通过fk_region.fk_country(设置fk_region时)

这种行为是为了避免冗余。

我的问题是:

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

我知道如何使用针对每笔付款的不同请求(使用COALESCE),但我希望在单一内容中执行此操作。

2 个答案:

答案 0 :(得分:0)

试试这个:

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

答案 1 :(得分:0)

只需在连接中使用OR

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;

http://sqlfiddle.com/#!1/3026f/1