我有2个用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
答案 0 :(得分:0)
您需要一个简单的LEFT JOIN
和GROUP BY
聚合。 LEFT JOIN
将确保对提供者负责,即使他/她没有任何产品。
SUM()
函数用于计算特定amount
的{{1}}的总和。我们可以使用COALESCE()
函数来处理provider
的值。对于没有提供者产品的情况,NULL
将返回SUM()
。
NULL
P.S。。建议在多表查询的情况下使用Aliasing,以确保代码清晰(可读)并避免歧义行为。
P.P.S。。如果您不想列出没有产品的提供商,您可以将SELECT
pvd.id,
pvd.name,
COALESCE(SUM(pdt.amount),0) AS total_amount
FROM Provider AS pvd
LEFT JOIN Product AS pdt
ON pdt.provider_id = pvd.id
GROUP BY pvd.id, pvd.name
更改为LEFT JOIN
,并摆脱INNER JOIN
函数的用法。
答案 1 :(得分:0)
这是SQL查询,可根据您的需要给出结果。
SELECT pr.name,SUM(p.amount) as total_amount FROM `provider` pr LEFT JOIN `product` p ON p.provider_id = pr.id where 1 GROUP BY pr.id