MySQL-每个项目的总销售额

MySQL-每个项目的总销售额,mysql,Mysql,下面的mysql查询用于获取用户id 31在2014年购买的每件商品的总销售额 而且只有两张桌子可供使用 订单\产品:订单\标识、产品\标识、产品\名称 订单:订单号、客户号、购买日期 我以为左键连接两个表会让我对未购买的项目充满空值。。。但它只提供了购买物品的行。如何计算所有已购买/未购买项目的每次总销售额 *更新 首先,您应该使用左外连接。您的WHERE子句正在减少您的结果。您应该将其删除为您的WHERE子句,或者添加如下内容: SELECT op.products_name, ROU

下面的mysql查询用于获取用户id 31在2014年购买的每件商品的总销售额



而且只有两张桌子可供使用

订单\产品:订单\标识、产品\标识、产品\名称

订单:订单号、客户号、购买日期

我以为左键连接两个表会让我对未购买的项目充满空值。。。但它只提供了购买物品的行。如何计算所有已购买/未购买项目的每次总销售额

*更新

首先,您应该使用
左外连接
。您的
WHERE
子句正在减少您的结果。您应该将其删除为您的
WHERE
子句,或者添加如下内容:

SELECT 
op.products_name,
ROUND(SUM( IF(MONTH(o.date_purchased) = 1, op.final_price * op.products_quantity,0)), 2) AS january,
ROUND(SUM( IF(MONTH(o.date_purchased) = 2, op.final_price * op.products_quantity,0)), 2) AS febraury,
ROUND(SUM( IF(MONTH(o.date_purchased) = 3, op.final_price * op.products_quantity,0)), 2) AS march,
ROUND(SUM( IF(MONTH(o.date_purchased) = 4, op.final_price * op.products_quantity,0)), 2) AS april,
ROUND(SUM( IF(MONTH(o.date_purchased) = 5, op.final_price * op.products_quantity,0)), 2) AS may,
ROUND(SUM( IF(MONTH(o.date_purchased) = 6, op.final_price * op.products_quantity,0)), 2) AS june,
ROUND(SUM( IF(MONTH(o.date_purchased) = 7, op.final_price * op.products_quantity,0)), 2) AS july,
ROUND(SUM( IF(MONTH(o.date_purchased) = 8, op.final_price * op.products_quantity,0)), 2) AS august,
ROUND(SUM( IF(MONTH(o.date_purchased) = 9, op.final_price * op.products_quantity,0)), 2) AS september,
ROUND(SUM( IF(MONTH(o.date_purchased) = 10, op.final_price * op.products_quantity,0)), 2) AS october,
ROUND(SUM( IF(MONTH(o.date_purchased) = 11, op.final_price * op.products_quantity,0)), 2) AS november,
ROUND(SUM( IF(MONTH(o.date_purchased) = 12, op.final_price * op.products_quantity,0)), 2) AS december
FROM orders_products op
LEFT OUTER JOIN orders o ON op.orders_id = o.orders_id
WHERE (customers_id = 31 
AND YEAR(o.date_purchased) = 2014) 
OR o.date_purchased IS NULL
GROUP BY op.products_id
ORDER BY op.products_name

请提供样本数据和预期输出您是否也有
产品
表?
orders\u products
表的
products\u id
字段是否引用了该表?能否请您发布表格数据的示例(包括
产品
,如果存在)?@fathahrhmanp I包括一个exmaple。谢谢。@PeterWiggin希望我的示例这次能给您提供清晰的信息:)谢谢。您确定带有
蛋白质
的行中有
产品\u id=30
?唯一的
产品\u名称
是否对应于唯一的
产品\u id
?这真奇怪!既然我已经确认它正在sqlfiddle上工作,我将接受这个答案,并将在我的问题上做更多的工作。谢谢
SELECT 
op.products_name,
ROUND(SUM( IF(MONTH(o.date_purchased) = 1, op.final_price * op.products_quantity,0)), 2) AS january,
ROUND(SUM( IF(MONTH(o.date_purchased) = 2, op.final_price * op.products_quantity,0)), 2) AS febraury,
ROUND(SUM( IF(MONTH(o.date_purchased) = 3, op.final_price * op.products_quantity,0)), 2) AS march,
ROUND(SUM( IF(MONTH(o.date_purchased) = 4, op.final_price * op.products_quantity,0)), 2) AS april,
ROUND(SUM( IF(MONTH(o.date_purchased) = 5, op.final_price * op.products_quantity,0)), 2) AS may,
ROUND(SUM( IF(MONTH(o.date_purchased) = 6, op.final_price * op.products_quantity,0)), 2) AS june,
ROUND(SUM( IF(MONTH(o.date_purchased) = 7, op.final_price * op.products_quantity,0)), 2) AS july,
ROUND(SUM( IF(MONTH(o.date_purchased) = 8, op.final_price * op.products_quantity,0)), 2) AS august,
ROUND(SUM( IF(MONTH(o.date_purchased) = 9, op.final_price * op.products_quantity,0)), 2) AS september,
ROUND(SUM( IF(MONTH(o.date_purchased) = 10, op.final_price * op.products_quantity,0)), 2) AS october,
ROUND(SUM( IF(MONTH(o.date_purchased) = 11, op.final_price * op.products_quantity,0)), 2) AS november,
ROUND(SUM( IF(MONTH(o.date_purchased) = 12, op.final_price * op.products_quantity,0)), 2) AS december
FROM orders_products op
LEFT OUTER JOIN orders o ON op.orders_id = o.orders_id
WHERE (customers_id = 31 
AND YEAR(o.date_purchased) = 2014) 
OR o.date_purchased IS NULL
GROUP BY op.products_id
ORDER BY op.products_name