我需要进行以下查询并提取按日分组的订单总数和总和。我正在使用时间戳存储所有内容。
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
)
我需要此查询来返回每天有销售,订单数量和销售额的总和。我在某处错过了一块拼图......
答案 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
?