2011-02-25 103 views
0

daily_average列总是返回零。默认时间戳值是过去一周。想知道我在做什么错在每天获得平均订单价值?帮助计算平均每天

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().' 
+0

什么是startTimestamp和endTimestamp?时代以来的时间?格式化日期?如果格式化,如何? DATEDIFF需要日期而不是时间戳。如果从时代开始,FROM_UNIXTIME会有所帮助。 – justkt 2011-02-25 15:04:05

+0

你明白了吗? – Rudu 2011-02-25 17:57:29

回答

0

您使用聚合函数(SUMCOUNTAVG)没有aggregate命令(GROUP BY)。我认为你的SQL比它需要更复杂(不需要内部选择)。

这里有一个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; 
0

铸造是否在为你的部门工作的内容之一?

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().'