Sql联接,计数引用,包括零
我制作了一个简单的数据库,其中包含两个表,“国家”和“人类”:Sql联接,计数引用,包括零,sql,mariadb,Sql,Mariadb,我制作了一个简单的数据库,其中包含两个表,“国家”和“人类”: +------+---------+ | id | name | +------+---------+ | 1 | Finland | | 2 | Sweden | | 3 | Norway | | 4 | Denmark | +------+---------+ +--------+----------+ | name | homeland | +--------+----------+
+------+---------+
| id | name |
+------+---------+
| 1 | Finland |
| 2 | Sweden |
| 3 | Norway |
| 4 | Denmark |
+------+---------+
+--------+----------+
| name | homeland |
+--------+----------+
| Liisa | 1 |
| Matti | 1 |
| Holger | 2 |
+--------+----------+
这个问题表明挪威没有人居住,但为什么它没有提到丹麦
select country.name, count(human.name)
from human
right join country on human.homeland = country.id
group by homeland;
+---------+-------------------+
| name | count(human.name) |
+---------+-------------------+
| Norway | 0 |
| Finland | 2 |
| Sweden | 1 |
+---------+-------------------+
我使用的是MariaDB,但也更喜欢在其他数据库上工作的解决方案。您通常通过
分组与选择的列相同的列,但那些是设置函数的参数的列除外:
通常,除了作为设置函数的参数的列外,您可以按与您选择的列相同的列进行分组:
按国家分组。改为按名称分组。今天的提示:至少在涉及多个表时,对所有列进行限定。例如,human.homeland
而不仅仅是homeland
。提示2:大多数人发现主表左连接可选数据
比可选数据右连接主表
@jarih更容易理解,这是一个简单的问题。谢谢如果你回答这个问题,我可以把它标记为有效。顺便说一句,为什么从我的问题来看挪威是零呢?没有人住在挪威!你有两个芬兰人和一个瑞典人。(LEFT JOIN/RIGHT JOIN将为您提供这些0人国家/地区。如果您不需要这些国家/地区,请执行常规的内部联接。)按国家/地区分组。改为按名称分组。
。今天的提示:至少在涉及多个表时,对所有列进行限定。例如,human.homeland
而不仅仅是homeland
。提示2:大多数人发现主表左连接可选数据
比可选数据右连接主表
@jarih更容易理解,这是一个简单的问题。谢谢如果你回答这个问题,我可以把它标记为有效。顺便说一句,为什么从我的问题来看挪威是零呢?没有人住在挪威!你有两个芬兰人和一个瑞典人。(LEFT JOIN/RIGHT JOIN将为您提供这些0人国家/地区。如果您不需要这些国家/地区,请执行常规的内部联接。)
select country.name, count(human.name)
from country
left join human on human.homeland = country.id
group by country.name;