Mysql 用于检索不同日期范围的总和的SQL查询

Mysql 用于检索不同日期范围的总和的SQL查询,mysql,sql,date,group-by,Mysql,Sql,Date,Group By,我有一张表格,上面有关于已售出产品、客户、购买日期和已售出单位汇总的信息 我试图得到的结果应该是4行,其中前三行是1月、2月和3月。最后一行是这3个月内没有销售的产品 这是桌子 表列包括: id sale_id product_id quantity customer_id payment_method_id total_price date time 因此,在结果中,前3行仅为: 一月份,一月份的总数 二月,二月的总数 三月,三月的总数 下一排应该是四月份,但是四月份还没有项目,所以我真的

我有一张表格,上面有关于已售出产品、客户、购买日期和已售出单位汇总的信息

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

这是桌子

表列包括:

id
sale_id
product_id
quantity
customer_id
payment_method_id
total_price
date
time
因此,在结果中,前3行仅为:

  • 一月份,一月份的总数
  • 二月,二月的总数
  • 三月,三月的总数 下一排应该是四月份,但是四月份还没有项目,所以我真的不知道怎么做

编者按:根据链接的图片,上面的专栏将是2013年的

SELECT SUM(totalprice), year(date), month(date) 
FROM sales
GROUP BY year(date), month(date)

如果我理解你的意思,你可以把逻辑放在
case
语句中,并在
groupby
中使用它:

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年),你需要为零销售额的月份设置一个占位符。这将列出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

你不能用datename(M,month(date))来代替这个例子,非常感谢。我认为必须有一些方法用于日期字段,但我自己没有找到它。谢谢。