2013-09-27 77 views
0

我已經用sum和一些mysql問題進行了stucked。我需要發票的表是這樣的:作爲行值的Mysql行的總和

id invoice_num net_value date    total_month 
_______________________________________________________ 
1 100   100.00  21.01.2013  500.00 
2 101   300.00  22.01.2013  500.00 
3 102   100.00  23.01.2013  500.00 
4 103   900.00  01.02.2013  900.00 
. 
. 
. 

的問題是如何計算所有發票的總和一個月(即一月如上),並顯示此總和作爲最後一列發票從一月的值。 一般說來,我需要按月分組但按每行顯示的發票值總和。 感謝提前:)

+1

日期列的數據類型是什麼?你可以使用'GROUP BY MONTH(date)'? – hjpotter92

+0

如果您的日期列看起來像這樣,請使用str_to_date將其更新爲ISO,以便SQL可以將其視爲日期。 http://dev.mysql.com/doc/refman/5.5/en/date-and-time-functions.html#function_str-to-date – AdrianBR

回答

2

,如果你沒有一個ISO日期,使其發生

http://dev.mysql.com/doc/refman/5.5/en/date-and-time-functions.html#function_str-to-date

mysql> SELECT STR_TO_DATE('01.5.2013','%d.%m.%Y'); 
     -> '2013-05-01' 

查詢時的日期是在ISO:

SELECT invoices.id, invoices.invoice_num, invoices.net_value, invoices.date, monthly.total_month 
FROM invoices 
INNER JOIN 
    (SELECT month(date) AS MONTH, 
      sum(net_value) AS total_month 
    FROM invoices group by month(date)) AS monthly ON monthly.MONTH=MONTH(invoices.date) 
+0

感謝您的建議,但是如果有很多數據內部選擇將是非常低效。關於日期formatit不是一個問題,問題是分組給出的列的總和值減少,我需要與一個字段中的總和相同的列數... – user2823585

+0

1.這是優化的方式來做到這一點。在大量數據的情況下,無論如何你都是每年選擇12行。你有幾百萬年?編號 2.分組不會減少列數。 3.上面的查詢以最佳速度方式返回您要求的內容,每天一行,旁邊有月總和。請閱讀分組是哪個查詢。 4.字符串格式的日期是一個問題,因爲引擎不能對字符串執行日期函數。 – AdrianBR

+0

不是問題我meand不是現在的問題:)但非常感謝您的答案:) – user2823585

0
select id,invoice_num,net_value,month(date),sum(total_month) as total_month 
from invoices 
group by month(date) 
+1

非法使用分組。請參閱http://dev.mysql.com/doc/refman/5.0/zh-CN/group-by-extensions.html 您的分組之外有非彙總字段 - 這些將返回第一行值,而不是正確的值 – AdrianBR

+0

@AdrianBR感謝您的信息。 – aaron