簡體   English   中英

將兩個表分為一組,共有時間戳和每個月的總金額

[英]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
  1. 如果在一個表中沒有用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字段創建索引。

  2. 其他情況(使用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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM