MySQL Group使用时间戳按天结果

时间:2010-04-19 21:03:28

标签: mysql timestamp

我需要进行以下查询并提取按日分组的订单总数和总和。我正在使用时间戳存储所有内容。

SELECT
    COUNT(id) as order_count,
    SUM(price + shipping_price) as order_sum,
    DAY(FROM_UNIXTIME(created)) as day
FROM `order`
WHERE '.implode(' AND ', $where).'

我需要在DAY之前进行分组,但是当我为上周末的销售工作时,它需要我的order_count并将其设为1而不是3.我如何提取按天分组的上述值?

注意:implode仅用于定义时间段(WHERE创建> = TIMESTAMP AND< = TIMESTAMP)

更新

没有GROUP BY day

Array ( 
    [order_count] => 3
    [order_sum] => 69.70
    [day] => 17
)

使用GROUP BY day

Array ( 
    [order_count] => 1
    [order_sum] => 24.90
    [day] => 17
)

我需要此查询来返回每天有销售,订单数量和销售额的总和。我在某处错过了一块拼图......

3 个答案:

答案 0 :(得分:40)

您是否忘记在最后添加GROUP BY ...

SELECT
    COUNT(id) as order_count,
    SUM(price + shipping_price) as order_sum,
    DAY(FROM_UNIXTIME(created)) as order_day
FROM `order`
WHERE '.implode(' AND ', $where).'
GROUP BY order_day

注意:

您不能将as day用于您的日期列,因为day是MySQL函数。使用类似order_day的内容。

独角兽

根据@OMG Unicorn的评论,您可以使用:

DAY(FROM_UNIXTIME(created)) as `day`

只要将day包裹在`反引号中。

答案 1 :(得分:2)

你也可以简单地使用:

SELECT 
COUNT( id ) AS order_count, 
SUM( price + shipping_price ) AS order_sum
FROM  `order` 
GROUP BY LEFT( timestamp, 10 ) 

甚至

GROUP BY SUBSTR(时间戳,1,10)

答案 2 :(得分:0)

您可能遇到DAY()(MySQL中的函数)和day(您的变量名)之间的命名冲突。您是否尝试过使用不会发生冲突的内容,例如order_day