为简单起见,我将给出一个我想要实现的快速示例:
表 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
而是将 John 设为 20 美元,因为他错误地插入了两次计划 ID #1。
我的查询目前是:
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 会错误地过滤结果,因为它只会显示已售出的单个 PlanID 1(即使成员 1 和 3 购买了它)。
任何帮助表示赞赏。
编辑
还有一张我忘了提到的表是代理表(将计划出售给成员的代理)。
最后的 group by 语句将代理 ID 出售的所有商品分组(将最终结果变成单行)。