【问题标题】:mysql grouping by weekmysql按周分组
【发布时间】:2011-07-15 16:40:08
【问题描述】:

我有一个包含以下字段的表格:

  • 身份证
  • amount_sale
  • the_date(unix 时间戳整数)
  • payment_type(可以是现金或账户)

我正在尝试创建一个查询,该查询将按一年中的每周对所有销售额进行分组,然后在我的页面上拆分每周的 amount_sales 总和。

例子:

week 1 = $26.00  
week 2 = $35.00  
week 3 = $49.00

等等。我正在使用此查询,但它不起作用:

  SELECT SUM(`amount_sale`) as total 
    FROM `sales` 
   WHERE `payment_type` = 'Account' 
GROUP BY WEEK(`the_date`)

【问题讨论】:

  • 你遇到了什么错误?

标签: mysql sql aggregate-functions


【解决方案1】:

如果您将the_date 存储为整数,则首先需要使用FROM_UNIXTIME 函数将其转换为日期时间:

 SELECT SUM(`amount_sale`) as total 
FROM `sales` 
WHERE `payment_type` = 'Account' 
GROUP BY WEEK(FROM_UNIXTIME(`the_date`))  

更新
另外,您可能想要输出周数,

SELECT CONCAT('Week ', WEEK(FROM_UNIXTIME(`the_date`))) as week_number,
SUM(`amount_sale`) as total 
FROM `sales` 
WHERE `payment_type` = 'Account' 
GROUP BY WEEK(FROM_UNIXTIME(`the_date`))

【讨论】:

    【解决方案2】:

    尝试同时选择查询中的周数,如下所示:

      SELECT SUM(`amount_sale`) as total, WEEK(`the_date`) as week
      FROM `sales` 
      WHERE `payment_type` = 'Account' 
      GROUP BY week ORDER BY week ASC
    

    如果您的周数涵盖数年,您也可以从 the_date 中选择年份并对其进行订购,例如

      ORDER BY week ASC, year ASC
    

    【讨论】:

      【解决方案3】:

      由于the_date 是一个unix 时间戳,WEEK 函数将不起作用。相反,您可以这样做:

      按周分组(FROM_UNIXTIME(the_date))

      请记住,这不会很好地执行,因为该函数需要应用于您正在查询的表中的每一行。

      【讨论】:

        【解决方案4】:

        带上你的dateget the week

        SELECT DATEPART( wk, getdate())  --this is assuming SQL server
        

        然后group

        【讨论】:

        • WEEK() 做同样的事情。我相信问题出在其他地方。此外,getdate() 不是有效的 MySQL 函数。
        • 问题被标记为“MySQL”... ;)
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2023-03-09
        • 1970-01-01
        • 2010-12-16
        • 2013-03-12
        • 1970-01-01
        • 2015-11-01
        • 1970-01-01
        相关资源
        最近更新 更多