MySQL - 在 Left Join 中使用没有 Where 的计数
MySQL - Use Count Without Where in Left Join
我的table看起来如下:
产品
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',总行数。如何修复我的查询以获得如上所示的所需结果。
你很接近。我想你只需要 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;
在大多数数据库中,您的查询会 return 出错。但是,MySQL 扩展了 SQL 的定义,以允许 SELECT
(例如 p.id
)中不在 GROUP BY
中的列。由于聚合函数,您有一个聚合查询。没有 GROUP BY
,它总是 return 一行,总结了所有数据。
SELECT p.id, p.title, p.price, COUNT(pd.id), SUM(pd.quantity)
FROM products p LEFT JOIN
产品详情
ON p.id = pd.pid
分组依据 p.id
按p.id分组就够了
我的table看起来如下:
产品
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',总行数。如何修复我的查询以获得如上所示的所需结果。
你很接近。我想你只需要 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;
在大多数数据库中,您的查询会 return 出错。但是,MySQL 扩展了 SQL 的定义,以允许 SELECT
(例如 p.id
)中不在 GROUP BY
中的列。由于聚合函数,您有一个聚合查询。没有 GROUP BY
,它总是 return 一行,总结了所有数据。
SELECT p.id, p.title, p.price, COUNT(pd.id), SUM(pd.quantity) FROM products p LEFT JOIN 产品详情 ON p.id = pd.pid 分组依据 p.id
按p.id分组就够了