web-dev-qa-db-ja.com

タイムスタンプを使用したMySQLグループの結果(日別)

次のクエリを使用して、合計注文数と注文の合計を日ごとにグループ化する必要があります。タイムスタンプを使用してすべてを保存しています。

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が3ではなく1になります。上記の値を日ごとにグループ化するにはどうすればよいですか?

注:内破は期間を定義するためにのみ使用されます(作成された場所> = 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
)

このクエリは、売り上げがあった毎日、注文数、およびそれらの売り上げの合計を返すために必要です。どこかでパズルのピースが欠けています...

29
Webnet

最後に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

注意:

dayはMySQL関数であるため、as dayを日付列に使用することはできません。 order_dayなどを使用します。

ユニコーンの

@OMG Unicornのコメントに従って、以下を使用できます。

DAY(FROM_UNIXTIME(created)) as `day`

day`バッククォートでラップする限り。

40
maček

次のように使用することもできます。

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

あるいは

GROUP BY SUBSTR(timestamp、1、10)

2

DAY()(MySQLの関数)とday(変数名)の間で名前の競合が発生している可能性があります。 order_dayなど、競合しないものを使用してみましたか?

0
Jack M.