我有两个用sql创建的表。第一个具有唯一的id和提供者的名称。第二个有一个产品名称,该产品的数量和供应商的id。
我需要一个查询,给我的名字,每个供应商和产品总额,他们有。
前任:
CREATE TABLE IF NOT EXISTS provider
(id int unique auto_increment primary key,
name char(50));
CREATE TABLE IF NOT EXISTS product
(id int unique auto_increment primary key,
name char(30),
provider_id int NOT NULL,
amount int NOT NULL);
Provider: (id, name)
1 Mike
2 Peter
3 John
Product: (id, name, provider_id, amount)
1 RedCar 1 100
2 BlueCar 1 50
3 RedCar 3 35
4 OrangeCar 2 500
5 GreenCar 3 250
Query:
Mike 150
Peter 500
John 285
2条答案
按热度按时间jmo0nnb31#
这是根据您的需要给出结果的sql查询。
4uqofj5v2#
你需要一个简单的
LEFT JOIN
与GROUP BY
聚合。LEFT JOIN
即使供应商没有任何产品,他/她也将确保向供应商交代。SUM()
函数用于计算amount
对于特定的provider
. 我们可以用COALESCE()
要处理的函数NULL
价值观。SUM()
会回来的NULL
对于供应商没有产品的情况。p、 建议在多表查询的情况下使用别名,以提高代码的清晰度(可读性)并避免模棱两可的行为。
p、 另外,如果您不想列出没有产品的供应商;你可以改变
LEFT JOIN
至INNER JOIN
,并摆脱COALESCE()
函数用法。