简体   繁体   English

帮助计算每天的平均值

[英]Help calculating average per day

The daily_average column is always returning zero. daily_average列始终返回零。 The default timestamp values are for the past week. 默认时间戳记值是过去一周的值。 Any thoughts on what I'm doing wrong here in getting the average order value per day? 在我做错了在这里得到每天的平均订单价值是什么有什么想法?

SELECT
    SUM(price+shipping_price) AS total_sales,
    COUNT(id) AS total_orders,
    AVG(price+shipping_price) AS order_total_average,
    (SELECT
            SUM(quantity)
        FROM `order_product`
        INNER JOIN `order` ON (
            `order`.id = order_product.order_id AND
            `order`.created >= '.$startTimestamp.' AND
            `order`.created <= '.$endTimestamp.' AND
            `order`.type_id = '.$type->getId().' AND
            `order`.fraud = 0
        )
    ) as total_units,
    SUM(price+shipping_price)/DATEDIFF('.$endTimestamp.', '.$startTimestamp.') as daily_average
FROM `order`
WHERE created >= '.$startTimestamp.' AND
created <= '.$endTimestamp.' AND
fraud = 0 AND
type_id = '.$type->getId().'

You're using aggregate functions ( SUM , COUNT , AVG ) without an aggregate command (group by). 您正在使用聚合函数( SUMCOUNTAVG )而没有聚合命令(分组依据)。 I think your SQL is more complicated than it needs to be (no need for the inner select). 我认为您的SQL比需要的要复杂(不需要内部选择)。

Here's a SQL command that should work (hard to test without test data ;)) 这是一条应该起作用的SQL命令(没有测试数据就很难进行测试;)

SELECT 
  COUNT(id) total_orders,
  SUM(finalprice) total_sales,
  AVG(finalprice) order_average,
  SUM(units) total_units,
  SUM(finalprice)/DATEDIFF('.$endTimestamp.', '.$startTimestamp.') daily_average
FROM (
  SELECT
    o.id id,
    o.price+o.shipping_price finalprice,
    SUM(p.quantity) units
  FROM order o INNER JOIN order_product p ON p.order_id=o.id
  WHERE o.created>='.$startTimestamp.' 
    AND o.created<='.$endTimestamp.'
    AND o.fraud=0
    AND o.type_id='.$type->getId().'
  GROUP BY p.order_id
) t;

Does casting one of the elements in the division work for you? 转换部门中的元素之一对您有用吗?

SELECT
    SUM(price+shipping_price) AS total_sales,
    COUNT(id) AS total_orders,
    AVG(price+shipping_price) AS order_total_average,
    (SELECT
        SUM(quantity)
        FROM `order_product`
        INNER JOIN `order` ON (
        `order`.id = order_product.order_id AND
        `order`.created >= '.$startTimestamp.' AND
        `order`.created <= '.$endTimestamp.' AND
        `order`.type_id = '.$type->getId().' AND
        `order`.fraud = 0
        )
    ) as total_units,
    CAST(SUM(price+shipping_price) AS float)/DATEDIFF('.$endTimestamp.', '.$startTimestamp.') as daily_average
FROM `order`
WHERE created >= '.$startTimestamp.' AND
created <= '.$endTimestamp.' AND
fraud = 0 AND
type_id = '.$type->getId().'

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM