【问题标题】:Sum monthly sales totals and provide output with month name and total for last 3 months汇总每月销售总额并提供过去 3 个月的月份名称和总额的输出
【发布时间】:2022-01-30 08:12:22
【问题描述】:

我正在尝试从 MYSQL 数据库中获取每月销售总额,并将它们按月份与过去 X 个月的月份名称相加。我定位的两列是:total_customer_charged 和 local_time。我的查询几乎可以正常工作,我遇到的问题是结果的顺序有时会随着每个查询而改变。谁能给我一些提示以使我的查询正确吗?

我现有的查询是:

select date_format(local_time,'%M'),sum(total_customer_charged) FROM ORDERS WHERE local_time BETWEEN curdate() - INTERVAL 3 MONTH AND curdate() group by month(local_time) order by year(local_time),month(local_time)

【问题讨论】:

  • 以文本而不是图像的形式发布您的数据样本!

标签: php mysql


【解决方案1】:

您应该像这样在 group-by 语句中添加年份:

select
    date_format(local_time, '%Y') AS agg_year,
    date_format(local_time, '%m') AS agg_month,
    sum(total_customer_charged) AS monthly_total_customer_charged
FROM
    ORDERS
WHERE
    local_time BETWEEN curdate() - INTERVAL 3 MONTH AND curdate()
group by
    date_format(local_time, '%Y'),
    date_format(local_time, '%m')
order by
    agg_year,
    agg_month

【讨论】:

  • 谢谢@quasi-human,我遇到的唯一问题是结果的顺序,我希望按月按时间顺序排列,但我得到的结果是 2021 年 8 月 - 10.48 2021 年 12 月 - 22.70 2021 年 11 月 - 10.48 2022 年 1 月 - 527.51
  • 我想出的一个解决方案是将结果放入 PHP 中的数组中,然后使用 uksort 将其放入正确的顺序。一定有办法让它们以正确的顺序从数据库中出来吗?
  • 我不知道你想做什么。你能澄清一下预期的结果吗?
  • 我正在使用数据月份和月份总计来绘制图表 (x,y)。因此查询结果的顺序很重要。在这种情况下,最好将结果显示为 Aug、Nov、Dec、Jan。当我运行查询时,结果显示为 Aug、Dec、Nov、Jan。
  • 我现在明白你想忽略年份信息,但我仍然不明白为什么在这种情况下你想要的顺序是八月、十一月、十二月、一月,而不是一月、八月、十一月、十二月。你能告诉我你想要的每月订单的第一个月吗?财政年度取决于国家/地区。
【解决方案2】:
SELECT MONTHNAME(local_time), SUM(total_customer_charged) 
FROM ORDERS 
GROUP BY YEAR(local_time), MONTH(local_time)

【讨论】:

    猜你喜欢
    • 2020-02-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-07-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多