bugfix> mysql > 投稿

私はこれを回避するのに少し問題があります。収入と支出の両方を含むトランザクションのテーブルが1つあり、次のクエリを使用して毎月の要約を取得できます。

SELECT month(`Transaction Date`) as month, ROUND(SUM(`Credit` - `Debit`),2) as revenue FROM `TABLE 1` WHERE `Account Group` = 'Income' AND `Transaction Date` BETWEEN '2019-01-01' AND '2019-12-31' GROUP BY month

与える:

|month |revenue |
|1     |100.00  |
|2     |50.00   |
|3     |400.00  |
etc, etc

そして

SELECT month(`Transaction Date`) as month, ROUND(SUM(`Credit` - `Debit`),2) as cost FROM `TABLE 1` WHERE `Account Type` = 'cost' AND `Transaction Date` BETWEEN '2019-01-01' AND '2019-12-31' GROUP BY month

与える:

|month |cost    |
|1     |53.00   |
|2     |20.00   |
|3     |9.99    |
etc, etc.

以下のように、データを1つの結果に結合するクエリを理解できません。過去にJOINを使用したことがありますが、これはすべて1つのテーブルにまとめられています。

|month |cost    |revenue |
|1     |53.00   |100.00  |
|2     |20.00   |50.00   |
|3     |9.99    |400.00  |
etc, etc.

どんな助けでも大歓迎です。どうもありがとう。

回答 2 件
  • これを試して:

    SELECT 
        month(`Transaction Date`) as month
        , ROUND(SUM(CASE 
                       WHEN `Account Group` = 'Income' THEN `Credit` - `Debit`
                       ELSE 0 
                    END),2) as revenue 
        , ROUND(SUM(CASE 
                       WHEN `Account Type` = 'cost' THEN `Credit` - `Debit` 
                       ELSE 0 
                    END),2) as cost 
    FROM `TABLE 1` 
    WHERE (`Account Group` = 'Income' OR  `Account Type` = 'cost')
         AND `Transaction Date` BETWEEN '2019-01-01' AND '2019-12-31' 
    GROUP BY month
    
    

  • 条件付き集計を使用できますが、次のようにより適切に使用できます。

    SELECT month(`Transaction Date`) as month, 
           ROUND(SUM(CASE WHEN `Account Group` = 'Income' THEN `Credit` - `Debit` END),2) as revenue, 
           ROUND(SUM(CASE WHEN `Account Type` = 'cost' THEN `Credit` - `Debit` END),2) as cost 
    FROM `TABLE 1` 
    WHERE `Account Group` IN ('Income','cost')
     AND `Transaction Date` BETWEEN '2019-01-01' AND '2019-12-31' 
    GROUP BY month
    
    

あなたの答え