我的表格如下:
产品
id title price
--------------------------------------
5 777 15
6 777 16
7 777 14
产品详情
id pid quantity color
--------------------------------------
1 5 5 red
2 5 5 yellow
3 5 5 green
4 6 6 yellow
5 6 5 red
6 7 5 red
7 7 4 pink
我想获得以下输出:
期望的结果
id title price numberofdetails quantity
------------------------------------------------------
5 777 15 3 15
6 777 16 2 11
7 777 14 2 9
为了得到这个,我正在运行以下mysql查询:
查询
SELECT p.id, p.title, p.price, COUNT(pd.id), SUM(pd.quantity)
FROM products as p
LEFT JOIN productdetails as pd
ON p.id = pd.pid
写了这个查询假设因为我已经定义了products.id和productdetails.pid之间的关系,它会COUNT(pd.id)= 3.而不是只计算匹配的行,它显示'7',总数行。如何修复我的查询以获得如上所示的所需结果。
答案 0 :(得分:1)
你非常接近。我想你只需要GROUP BY
:
SELECT p.id, p.title, p.price, COUNT(pd.id), SUM(pd.quantity)
FROM products p LEFT JOIN
productdetails pd
ON p.id = pd.pid
GROUP BY p.id, p.title, p.price;
在大多数数据库中,您的查询都会返回错误。但是,MySQL扩展了SQL的定义,以允许SELECT
中的列(例如p.id
)不在GROUP BY
中。由于聚合功能,您有一个聚合查询。如果没有GROUP BY
,它总会返回一行,汇总所有数据。
答案 1 :(得分:1)
SELECT p.id,p.title,p.price,COUNT(pd.id),SUM(pd.quantity) 来自产品p LEFT JOIN productdetails pd ON p.id = pd.pid GROUP BY p.id
按p.id分组就足够了