【问题标题】:How to count rows called orders from the last 30 days and sum up the price of that order?如何计算过去 30 天内称为订单的行并总结该订单的价格?
【发布时间】:2019-08-31 20:35:06
【问题描述】:

订单表由数量、价格、用户名和订单日期组成,日期时间格式。

如果提交了多个项目,例如 8 台显示器和 2 台,则从购物车页面提交订单。它将作为两个单独的记录输入。

目标:将用户拥有的每条记录的数量乘以价格,然后将过去 30 天的记录相加。

尝试使用以下代码获取过去 30 天的订单,但该代码不起作用。

编辑:获取过去 30 天订单的工作代码

SELECT * FROM `orders` 
where orderdate between adddate(now(),-30) and now()

老实说不知道从上面的 sql 语句从哪里开始,不知道 groupbys、count 和 sum() 函数的确切位置,因为我只是从 sql 开始。

【问题讨论】:

  • 这怎么行不通?

标签: php mysql sql phpmyadmin


【解决方案1】:

您可以使用以下查询

SELECT SUM(`price`) AS sum FROM orders
WHERE `orderdate` BETWEEN DATE_SUB(NOW(), INTERVAL 30 DAY) AND NOW();

如果您需要计算行数并总结销售价格

SELECT SUM(`price`) AS sum,COUNT(*) AS counter FROM orders
WHERE `orderdate` BETWEEN DATE_SUB(NOW(), INTERVAL 30 DAY) AND NOW();

或者,如果您希望通过用户名进行这些查询,

SELECT SUM(`price`) AS sum FROM orders
WHERE uname = 'test' and `orderdate` BETWEEN DATE_SUB(NOW(), INTERVAL 30 DAY) AND NOW();

SELECT SUM(`price`) AS sum,COUNT(*) AS counter FROM orders
where uname = 'test' and `orderdate` BETWEEN DATE_SUB(NOW(), INTERVAL 30 DAY) AND NOW();

【讨论】:

  • 这很好用,只是它不会将数量乘以价格。
  • @IanO'Loughlin 使用 SUM(价格*数量)
【解决方案2】:

更明确:

WHERE orderdate >= CURRENT_TIMESTAMP - INTERVAL 30 DAY

或者,因为您可能不关心时间组件:

WHERE orderdate >= CURRENT_DATE - INTERVAL 30 DAY

【讨论】:

    【解决方案3】:

    为了获得最近 30 天的“总订单价值”,您需要在 price*quantity 上计算 SUM()

    SELECT SUM(price*quantity) AS total_order_value 
    FROM orders 
    WHERE orderdate BETWEEN NOW() - INTERVAL 30 DAY and NOW()
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-05-17
      • 1970-01-01
      • 2016-08-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多