2012-01-09 177 views
2

我有一個表MySQL的集團通過總和

id int pk auto_inc | created int(11) | amount int | user_id int 

我想創建總計金額字段按天分組行的列表。

我已經試過這樣:

SELECT created, sum(amount) as amount, id FROM total_log WHERE user_id = $this->user_id GROUP BY DAY(created) 

這不會給出正確的結果。他們被分成一排。

的日期是從DD/MM/YYYY格式保存到UNIX時間戳一樣1349046000

+0

如果有超過一排的嗎?你有'where user_id = $ this-> user_id'。這使我認爲只有一行,即使在結果集被分組之前。 – 2012-01-09 20:30:05

+0

woops忘了提及user_id。不是有同樣的user_id – iamjonesy 2012-01-09 20:31:03

+0

嗯..是適當的查詢多個記錄?它不會在sql server中進行事件編譯。 Select子句引用了在group by子句中使用的「created」和「id」列(day(創建)與這些術語中創建的不同)。 – pkmiec 2012-01-09 20:32:36

回答

3
SELECT 
    DATE(FROM_UNIXTIME(created)) as d, 
    sum(amount) as amount 
FROM total_log 
WHERE user_id = $this->user_id 
GROUP BY d 
+0

非常感謝! – iamjonesy 2012-01-09 21:07:26

+0

不客氣 – frail 2012-01-09 21:09:50

1

MySQL不喜歡混合dayint列:

mysql> select day(1349046000); 
+-----------------+ 
| day(1349046000) | 
+-----------------+ 
|   NULL | 
+-----------------+ 
1 row in set, 1 warning (0.00 sec) 

mysql> show warnings; 
+---------+------+----------------------------------------+ 
| Level | Code | Message        | 
+---------+------+----------------------------------------+ 
| Warning | 1292 | Incorrect datetime value: '1349046000' | 
+---------+------+----------------------------------------+ 
1 row in set (0.00 sec) 

所以所有的行會NULLday(some_int_value),他們將全部在同一組中。

我建議使用該列的datedatetime類型。

另外,不應在select語句中引用不在group by子句中的列,除非在它們上使用聚合函數。

1

嘗試

SELECT 
DAY(DATE(FROM_UNIXTIME(created))), 
sum(amount) as amount 
FROM total_log 
WHERE user_id = $this->user_id 
GROUP BY DAY(DATE(FROM_UNIXTIME(created)))