2017-10-10 4 views
1

費用、所得、貯蓄を比較する毎月のパーセント値を得ることができるクエリを作成しようとしていますお互いにwhith。私はMySQLデータベースを使用しています。テーブルやクエリにMySQLは費用、所得、貯蓄(3つの異なるテーブル)の総額の総和を月ごとの割合と比較します

例: http://sqlfiddle.com/#!9/78b360/1

これまでのところ、私は各テーブルから月額SUMを取得することができるよ:

SELECT * 
FROM(
SELECT sum(amount) AS Total, month(date) AS Month FROM expenses 
UNION ALL 
SELECT sum(amount), month(date) FROM income 
UNION ALL 
SELECT sum(amount), month(date) FROM savings 
GROUP BY month(date)) as grand_total 

結果:

| Total | Month | 
|---------|-------| 
| 1323232 |  9 | 
| 300101 |  9 | 
| 20000 |  9 | 
|  1 | 10 | 

達成するために私がしようとしているのは、私が月9だけを見れば、このようなものです:

| Total | Month | Percent 
|---------|-------|-------- 
| 1323232 |  9 |  81% 
| 300101 |  9 |  18% 
| 20000 |  9 |  1% 

ここで私を助けてもらえますか?私はstackoverflowや他のサイトで何度も多くの答えを見てきましたが、まさに必要なものを見つけることができませんでした。あなたの助けが大変ありがとうございます。ありがとうございました。

答えて

0

現在のクエリの問題は、expensesまたはincomeテーブルの月ごとに集計されておらず、savingsテーブルの場合のみです。最後のGROUP BYではなく、はすべてに適用されます。

ここで行う必要があるのは、最初に3つのテーブルのそれぞれについて月ごとに集計し、それらの結果を結合し、次に2か月間に集計して各月の総計を取得することです。

SELECT 
    month, 
    SUM(total) AS month_total 
FROM 
(
    SELECT MONTH(date) AS month, SUM(amount) AS total 
    FROM expenses 
    GROUP BY MONTH(date) 
    UNION ALL 
    SELECT MONTH(date), SUM(amount) 
    FROM income 
    GROUP BY MONTH(date) 
    UNION ALL 
    SELECT MONTH(date), SUM(amount) 
    FROM savings 
    GROUP BY MONTH(date) 
) t 
-- WHERE month = 9   -- or whichever months you want to see 
GROUP BY 
    month 
ORDER BY 
    month 
+0

最後の 'GROUP BY'が当てはまると思いました。ごめんなさい。今、集計してパーセンテージを得ることができます。ニース! – Gee

+0

毎月2回目の集計を行い、毎月の総計を得るにはどうすればよいですか? – Gee

+0

私の答えはすでに毎月の総額を出しています。 –

関連する問題