2016-08-13 4 views
0

私のクエリには基本的なものがありません。 私は3つの取引テーブル(経費、請求書、所得)を、その期間のカテゴリの種類(カテゴリ)で合計したいと思っています。テーブルでフィルタリングするUNION

私は3つの選択をUNIONで結合し、カテゴリの合計を返しますが、クエリは各選択から重複したカテゴリを返します。 https://gist.github.com/telagraphic/2e3af3c39211a761af37fe9ba4aceddf

がどのようになるだろうUNION内のすべての選択のために合計する各カテゴリ -

ここでは、クエリの迅速な要旨はありますか?

問合せ:

私は、すべてのトランザクションが与えられた期間での金額合計したい28個のカテゴリーがあります。 テーブルごとに各selectステートメントを単独で実行すると、各カテゴリごとに28行が取得されます。 3つのテーブルすべてにUNIONを使用すると、28個以上のレコードが取得されます。 そのカテゴリの金額がある場合、 '複製'カテゴリが含まれます。 UNIONに重複が含まれていないことを知っています... 各カテゴリに対して費用、請求書、所得を返すためにこのクエリを書き直す必要があります。 私は、データベースでこれを行うには、クライアントでreduceを使用するよりも好むでしょう。

私はいくつかの書き換えを試みましたが、クエリを書く方法に関する提案は役に立ちます。 はまだ解決を見ていない...

SELECT cat.name AS category, SUM(ex.amount) AS weekly_total, trx.id AS type 
FROM categories cat 
FULL OUTER JOIN expenses ex ON (cat.id = ex.categorytype) 
AND date_trunc('month', ex.trxdate) = date_trunc('month', current_date) 
INNER JOIN transaction_type trx ON (cat.transactiontype = trx.id) 
GROUP BY cat.name, trx.id 
UNION 
SELECT cat.name AS category, SUM(bl.amount) AS weekly_total, trx.id AS type 
FROM categories cat 
FULL OUTER JOIN bills bl ON (cat.id = bl.categorytype) 
AND date_trunc('month', bl.paiddate) = date_trunc('month', current_date) 
INNER JOIN transaction_type trx ON (cat.transactiontype = trx.id) 
GROUP BY cat.name, trx.id 
UNION 
SELECT cat.name AS category, SUM(inc.netamount) AS weekly_total, trx.id AS type 
FROM categories cat 
FULL OUTER JOIN income inc ON (cat.id = inc.categorytype) 
AND date_trunc('month', inc.payday) = date_trunc('month', current_date) 
INNER JOIN transaction_type trx ON (cat.transactiontype = trx.id) 
GROUP BY cat.name, trx.id; 

これは、それぞれの重複を返す選択:

enter image description here

を私はクエリはこの

enter image description here

のように、各カテゴリで返すことでしょう

答えて

0

あなたは次のようにすることができます:

select category, sum(amount) 
from ((select category, amount from expenses) union all 
     (select category, amount from bills) union all 
     (select category, amount from income) 
    ) c 
group by category; 

注:問題の画像を直接置く方が良いです - テキストとしてでクエリを置くために、まだ良いですか。そうすれば、回答している人は、あなたの質問を答えの基礎として使うことができます。

+0

あなたの提案に基づいて投稿を更新しました。 – nick

+0

このクエリは、対応する値を持つカテゴリのみを返します。私はすべてのカテゴリを取得する必要があります。このクエリを変更しようとします。ありがとうゴードン。 – nick

関連する問題