使用 MySql 5.7.34 并有一个表 groups_members,有 4 列
ID | 团体 | 成员 | 组织 |
---|---|---|---|
1 | 一个 | 鲍勃 | 苹果 |
2 | 一个 | 苏珊 | 苹果 |
3 | 一个 | 乔 | 苹果 |
4 | 乙 | 史蒂夫 | 微软 |
5 | 乙 | 麦克风 | 微软 |
6 | 乙 | 鲍勃 | 微软 |
7 | C | 苏珊 | 苹果 |
8 | C | 鲍勃 | 苹果 |
9 | C | 乔 | 苹果 |
我想选择同时拥有 Bob 和 Joe 作为成员的所有组,并且该组织仅是 Apple,每个组在结果中只有一行。
预期成绩:
团体 |
---|
一个 |
C |
如果可能的话,理想情况下,我还希望从同一查询中的另一个表中为每个组选择和求和一些值。基本上得到所有以 Bob 和 Joe 作为成员的团体,并获得该团体的综合积分和里程:
ID | 团体 | 积分 | 英里 |
---|---|---|---|
1 | 一个 | 10 | 100 |
1 | C | 10 | 150 |
1 | 一个 | 10 | 100 |
1 | 乙 | 10 | 200 |
1 | 乙 | 10 | 100 |
所以理想的预期结果实际上是:
团体 | 积分 | 英里 |
---|---|---|
一个 | 20 | 200 |
C | 10 | 150 |
我可以想出一些方法来使用多个查询和一些应用程序逻辑来做到这一点。但是,如果可以通过一个查询完成所有操作,那就太好了。
一种可能的方式:
注意。我将组织从 更改
(2,'A','Susan','Apple'),
为(2,'A','Susan','Microsoft'),
,仅用于测试目的https://dbfiddle.uk/?rdbms=mysql_8.0&fiddle=af373d5f67a7f9918b6e441be95723d6
请不要在您的情况下使用MySQL保留字
group
。如果可能的话,我建议重命名,否则你必须把它放在反引号内。子查询只返回
group
至少有 ('Bob','Joe') 的,它也可能是其他的。这
where not exists
将过滤所有具有组织!='Apple'的组。下面的索引应该有助于优化器加速查询
第一个查询:
第二个查询有点不清楚,特别是C组的积分和里程计算。