Sql 无法显示区域容量的零
我目前正试图解决这个问题: 确定每个地区某个国家供应商仓库的总容量。供应商的国家是美国。如果区域中没有仓库,则为该区域打印值0。按地区字母顺序打印地区和容量 这是预期的结果:Sql 无法显示区域容量的零,sql,sqlite,Sql,Sqlite,我目前正试图解决这个问题: 确定每个地区某个国家供应商仓库的总容量。供应商的国家是美国。如果区域中没有仓库,则为该区域打印值0。按地区字母顺序打印地区和容量 这是预期的结果: region capacity AFRICA 4314 AMERICA 10446 ASIA
region capacity
AFRICA 4314
AMERICA 10446
ASIA 0
EUROPE 8402
MIDDLE EAST 10866
到目前为止,我已经为我的SQL语句完成了这项工作,并且大部分都是正确的,但是无论我做了什么尝试,我都无法让亚洲打印0
select r_name, sum(w_capacity)
from warehouse,region,nation n1,nation n2,supplier
where w_suppkey = s_suppkey
AND w_nationkey = n2.n_nationkey
AND n1.n_nationkey = s_nationkey
AND n2.n_regionkey = r_regionkey
AND n1.n_name = "United States
group by r_name;
这是我的结果:
warehouse capacity
AFRICA 4314
AMERICA 10446
EUROPE 8402
MIDDLE EAST 10866
所用表格的别名:
Warehouse table:
w_warehousekey decimal(9,0) not null,
w_name char(100) not null,
w_capacity decimal(6,0) not null,
w_suppkey decimal(9,0) not null,
w_nationkey decimal(2,0) not null
我使用了TPC-H数据库。此链接显示我提供的表的所有别名:
使用左连接确保始终包含区域。没有对应行的区域的总数将为空。要克服这个问题,请使用IFNULL函数 例如:
Region
RegionID RegionName
1 Europe
2. Americas
Sales
Date RegionID Amount
1/1/2020 1 10
2/1/2020 1 20
SELECT r.RegionName, IFNULL(SUM(s.Amount), 0) AS Amount
FROM region r LEFT JOIN sales s ON r.RegionID= s.RegionID
GROUP BY RegionName
Expected result:
RegionName Amount
Europe 30
Americas 0
请在所有表格中添加别名,以便我在提出编码解决方案时不必猜测。我已编辑了我的帖子。很抱歉,@TarikI提供了一个简化的示例,可以帮助您完成。我建议您使用更加明确的
join on
语法,并且不要将where子句中不属于它的join列降级。如果您仍然卡住,请告诉我。最好使用内部联接,左联接,
而不是和无论如何,您需要使用“左联接”或和(+)
而不是联接
或和
来处理联接过程中没有记录的表,并且还需要使用isnull(总和(容量),0)
我仍然对如何在代码中添加左连接感到困惑。你能再澄清一点吗?非常感谢。