2012-11-23 115 views
1

這是推動我瘋了,我不能縫不代碼巨量來管理這個,這是我的SQL表:MySQL和PHP計算,每月平均有多個用戶ID的

userid date  orderValue 
2  2012-01-01  2000 
1  2012-01-01  3000 
1  2012-01-01  5000 
1  2012-01-02  5000 
2  2012-01-02  8000 
2  2012-01-02  8000 

對於每個月我需要從當前月份的第一個日期開始獲取每個用戶的平均值。

輸出我'尋找的是沿 $ orderArray [每月$] [$用戶ID]線東西[「平均」]

我不轉播需要的代碼,突出部分需要得到我的腦海裏浮現出當前人們堅持的想法。你會如何去解決這個問題?

回答

1

線沿線的東西:

SELECT 
    `userid`, 
    DATE_FORMAT(`date`, '%Y%m') AS `month`, 
    AVG(`orderValue`) AS `mean` 
FROM 
    `orderTable` 
GROUP BY 
    `userid`, 
    `month` 

請注意,我使用DATE_FORMAT代替MONTH。如果你不這樣做,2012年1月和2013年1月將被有效合併,我想這不是你想要的。

您必須通過迭代SQL結果集並將每個平均值放在適當的位置來自己在PHP中創建所需的結果數組。

+0

謝謝你Bart!很久以前我用SQL,忘了你可以做多個'group by',很有道理! –

0

試試這個::

Select 
    userid, 
    SUM(ordervalue)/count(*) as mean 

    from table 
    group by 

    userid 
+0

......從有史以來的第一天...我認爲OP希望所有事物的平均值達到當前月份,每個月(累計是我認爲的詞)。 – Mr47

+0

是的,我需要每個用戶的累計和的平均值。不是那個單月的意思。 –

+0

@Robin:請立即檢查查詢 –