3

我有一张表格,其中包含有关已售产品、客户、购买日期和已售单位摘要的信息。

我试图得到的结果应该是 4 行,其中第 1 行是 1 月、2 月和 3 月。最后一行是这 3 个月内未售出的产品。

这是桌子。http://imageshack.us/a/img823/8731/fmlxv.jpg

表格列是:

id
sale_id
product_id
quantity
customer_id
payment_method_id
total_price
date
time

因此,结果第一 3 行将是:

  • 一月,一月的总和
  • 二月,二月的总和
  • March,SUM for MArch,下一行应该是 April,但是 April 还没有项目,所以我真的不知道该怎么做。

编者注:根据链接的图像,上面的列将是 2013 年。

4

3 回答 3

6

我会选择以下

SELECT SUM(totalprice), year(date), month(date) 
FROM sales
GROUP BY year(date), month(date)
于 2013-05-15T14:58:50.180 回答
1

这个答案是基于我对你问题的这一部分的解释:

March,SUM for MArch,下一行应该是 April,但是 April 还没有项目,所以我真的不知道该怎么做。

如果您想获取一年中的所有月份(例如 2013 年),则需要为销售量为零的月份设置一个占位符。这将列出 2013 年的所有月份,即使它们没有销售:

SELECT m.monthnum, SUM(mytable.totalprice)
FROM (
  SELECT 1 AS monthnum, 'Jan' as monthname
  UNION SELECT  2, 'Feb'
  UNION SELECT  3, 'Mar'
  UNION SELECT  4, 'Apr'
  UNION SELECT  5, 'May'
  UNION SELECT  6, 'Jun'
  UNION SELECT  7, 'Jul'
  UNION SELECT  8, 'Aug'
  UNION SELECT  9, 'Sep'
  UNION SELECT 10, 'Oct'
  UNION SELECT 11, 'Nov'
  UNION SELECT 12, 'Dec') m
LEFT JOIN my_table ON m.monthnum = MONTH(mytable.date)
WHERE YEAR(mytable.date) = 2013
GROUP BY m.monthnum
ORDER BY m.monthnum
于 2013-05-15T15:10:38.253 回答
0

如果我理解您的意思,您可以将逻辑放在case语句中并将其用于group by

select (case when month(date) = 1 then 'Jan'
             when month(date) = 2 then 'Feb'
             when month(date) = 3 then 'Mar'
             else 'Other'
        end) as period, sum(quantity) as sumquantity
from t
group by (case when month(date) = 1 then 'Jan'
             when month(date) = 2 then 'Feb'
             when month(date) = 3 then 'Mar'
             else 'Other'
        end)
于 2013-05-15T14:59:19.783 回答