[英]Group two table with timestamps in common and sum amount for each month
第1次收入和第2次支出,以日期作為時間戳記,以及每個月的收入和支出總額,現在我想將其放入下表中
Month | Income | Expense | Profit
到現在為止,我只能將一個表的總數作為總數進行分組,但是我需要一個可以同時處理兩個表的查詢。
我的查詢是
$result = mysql_query("SELECT
date_on,
MONTHNAME(FROM_UNIXTIME(date_on)) as expmonth,
YEAR(FROM_UNIXTIME(date_on)) as expyear,
sum(amount) as exp_total
from finance_grdps_exp
group by expmonth,expyear order by date_on DESC")
or die(mysql_error());
$no=0;
$countem = 0;
while($row = mysql_fetch_array($result))
{$no++;
echo'
<tr class="gradeX">
<td>'.
$row['expmonth'].' '.$row['expyear'].'
</td>
<td>'.
$row['exp_total'].'
</td>
<td>'.
$row['income_total'].' /* not working as if now
</td>
<td>'.
PROFIT.'/* not working as if now
</td>
</tr>
';
}
伙計樣本日期基准為....
收入表...
經驗表
謝謝
魯本感謝您的回復....但我遇到了錯誤
...在這兩種情況下我都出錯了---每個派生表都必須具有自己的別名....
SELECT MONTHNAME(FROM_UNIXTIME(date_on)) as expmonth,
YEAR(FROM_UNIXTIME(date_on)) as expyear,
SUM(amount) as exp_total,
SUM(income_amount) as inc_total
FROM(SELECT finance_grdps_exp.date_on AS date_on,
finance_grdps_exp.amount AS exp_amount,
0 AS inc_amount
UNION
SELECT finance_grdps_income.income_date AS date_on,
0 AS exp_amount,
finance_grdps_income.income_amount AS inc_amount)
GROUP BY expyear, expmonth ORDER BY date_on DESC
請幫忙
假設您有兩個具有以下結構的表finance_grdps_exp和finance_grdps_inc:
date_on | amount
如果在一個表中沒有用date_on編碼的具有相同年份和月份的兩行,則date_on僅包含年份和月份,即所有行的其他字段(日期和時間)相同。
您可以將它們與INNER JOIN構造結合使用:
SELECT finance_grdps_exp.date_on AS date_on, finance_grdps_exp.amount AS exp_amount, finance_grdps_inc.amount AS inc_amount FROM finance_grdps_exp INNER JOIN finance_grdps_inc ON finance_grdps_exp.date_on = finance_grdps_inc.date_on
結果結構為:
date_on | exp_amount | inc_amount
然后,將您的想法應用於結果結構:
SELECT date_on, MONTHNAME(FROM_UNIXTIME(finance_grdps_exp_and_inc.date_on)) as expmonth, YEAR(FROM_UNIXTIME(finance_grdps_exp_and_inc.date_on)) as expyear, SUM(finance_grdps_exp_and_inc.exp_amount) as exp_total, SUM(finance_grdps_exp_and_inc.inc_amount) as inc_total FROM (SELECT finance_grdps_exp.date_on AS date_on, finance_grdps_exp.amount AS exp_amount, finance_grdps_inc.amount AS inc_amount FROM finance_grdps_exp INNER JOIN finance_grdps_inc ON finance_grdps_exp.date_on = finance_grdps_inc.date_on) AS finance_grdps_exp_and_inc GROUP BY expyear, expmonth ORDER BY date_on DESC
mysql_query給我們:
[ expmonth, expyear, exp_total /* expense per month */, inc_total /* income per month */ ]
為了確保INNER JOIN語句的最大性能,請在兩個表中為date_on字段創建索引。
其他情況(使用UNION SELECT)。
SELECT MONTHNAME(FROM_UNIXTIME(finance_grdps_exp_and_inc.date_on)) as expmonth, YEAR(FROM_UNIXTIME(finance_grdps_exp_and_inc.date_on)) as expyear, SUM(finance_grdps_exp_and_inc.exp_amount) as exp_total, SUM(finance_grdps_exp_and_inc.inc_amount) as inc_total FROM(SELECT finance_grdps_exp.date_on AS date_on, finance_grdps_exp.amount AS exp_amount, 0 AS inc_amount FROM finance_grdps_exp UNION SELECT finance_grdps_inc.date_on AS date_on, 0 AS exp_amount, finance_grdps_inc.amount AS inc_amount finance_grdps_inc) AS finance_grdps_exp_and_inc GROUP BY expyear, expmonth ORDER BY date_on DESC
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.