返回多个列并按月分组

时间:2010-07-07 09:48:06

标签: sql mysql

我有三个表产品,销售和成本。

sales和products表每个都有一个十进制类型的成本字段和一个日期类型的日期字段。

此外,sales表有一个productname字段,该字段与products表中的productname字段匹配。

产品表还有一个类别字段。

我想选择每个月的所有销售和所有购买,并将其显示在按月分组的单独列中,直到当前年份。

如下所示

            Sales  Purchases

January      100      50
Febuary      100      50
March        100      50
April        100      50
May          100      50
June         100      50
July          30      50

购买表与任何其他表无关。

但是,sales表productname字段仅包含products.productname。

中存在的产品

我想添加到查询的末尾

WHERE sales.productname = products.productname AND category ='Food'

我不确定如何返回多个列,每月汇总一次,然后按月分组。

我在这里问了一些类似的东西,并采取了一个解决方案,但它在一栏中一起归还了销售和购买。

我如何将它们作为单独的列保留?

2 个答案:

答案 0 :(得分:1)

与Dave的答案有些相似,但会显示销售和购买数月的存在:

SELECT theMonth, sum(Sales) as sumSales, sum(Purchases) as sumPurchases
FROM
 ( SELECT date_format(theDate, "%Y-%m") AS theMonth, Cost as Sales, 0 AS Purchases
   FROM sales, products
   WHERE sales.productname=products.productname AND category='Food'
  UNION ALL
   SELECT date_format(theDate, "%Y-%m") AS theMonth, 0 as Sales, Cost as Purchases
   FROM purchases
 ) AS all_costs
group by theMonth;

(以下评论编辑)

答案 1 :(得分:0)

尝试这个或类似的东西......

SELECT sal.theMonth, sal.sumSales, pur.sumPurchases
FROM
 (  
   SELECT date_format(theDate, "%Y-%m") AS theMonth, sum(sales) AS sumSales
   FROM sales_table
   GROUP BY theMonth
 ) AS sal
INNER JOIN
 (  
   SELECT date_format(theDate, "%Y-%m") AS theMonth, sum(purchases) AS sumPurchases
   FROM purchases_table
   GROUP BY theMonth
 ) AS pur
ON sal.theMonth = pur.theMonth

显然,您需要根据表格定义调整表格和字段名称...