簡単にするために、私が達成しようとしていることの簡単な例を示します。
表 1 - メンバー
ID | Name
--------------------
1 | John
2 | Mike
3 | Sam
表 1 - Member_Selections
ID | planID
--------------------
1 | 1
1 | 2
1 | 1
2 | 2
2 | 3
3 | 2
3 | 1
表 3 - Selection_Details
planID | Cost
--------------------
1 | 5
2 | 10
3 | 12
クエリを実行すると、メンバーごとにグループ化されたすべてのメンバー選択の合計が返されます。しかし、私が直面している問題 (例: 表 2 のデータ) は、一部のメンバーがシステム内で誤って重複した情報を持っている可能性があることです。このデータを前もってフィルタリングするために最善を尽くしますが、時々、情報を引き出すためにシステムに必要な呼び出しを行うときに、このデータをフィルタリングしたいと考えています。
結果は以下を示すべきです:
結果表
ID | Name | Total_Cost
-----------------------------
1 | John | 15
2 | Mike | 22
3 | Sam | 15
しかし、誤ってプラン ID #1 を 2 回挿入したため、John を $20 とします。
私のクエリは現在:
SELECT
sq.ID, sq.name, SUM(sq.premium) AS total_cost
FROM
(
SELECT
m.id, m.name, g.premium
FROM members m
INNER JOIN member_selections s USING(ID)
INNER JOIN selection_details g USING(planid)
) sq group by sq.agent
DISTINCT s.planID を追加すると、(メンバー 1 と 3 が購入したにもかかわらず) 販売された PlanID 1 が 1 つしか表示されないため、結果が正しくフィルター処理されません。
どんな助けでも大歓迎です。
編集
また、エージェント テーブル (プランをメンバーに販売したエージェント) について言及するのを忘れていた別のテーブルもあります。
最後の group by ステートメントは、エージェント ID によって販売されたすべての商品をグループ化します (これにより、最終結果が 1 行になります)。