MySQL - 使用不带左边加入位置的计数

时间:2016-09-27 11:45:26

标签: mysql database left-join

我的表格如下:

产品

 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',总数行。如何修复我的查询以获得如上所示的所需结果。

2 个答案:

答案 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分组就足够了