私のクエリには基本的なものがありません。 私は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;
これは、それぞれの重複を返す選択:
を私はクエリはこの
のように、各カテゴリで返すことでしょう
あなたの提案に基づいて投稿を更新しました。 – nick
このクエリは、対応する値を持つカテゴリのみを返します。私はすべてのカテゴリを取得する必要があります。このクエリを変更しようとします。ありがとうゴードン。 – nick