如何获得 MySQL JOIN 的结果,其中记录满足加入 table 中的值标准?
How do I get results of a MySQL JOIN where records meet a value criteria in joined table?
这可能很简单,但我想不通...
我有两个表:
tbl_results:
runID | balance |
1 | 3432
2 | 5348
3 | 384
tbl_phases:
runID_fk | pc |
1 | 34
1 | 2
1 | 18
2 | 15
2 | 18
2 | 20
3 | -20
3 | 10
3 | 60
我想获取以下记录集:runID、balance、min(pc)、max(pc) 仅 其中 pc>10 且 pc<50 将每个 runID 作为一个组,不包括任何关联 pc 值超出值范围的 runID。
我希望根据上述内容获得以下结果:
runID | balance | min_pc | max_pc
2 | 5348 | 15 | 20
... 因为 runID=1&3 的 pc 值超出了上述 pc 的数值范围。
提前致谢!
您可以根据您在 having 子句中的要求应用过滤器。您可以尝试以下方法。
查询#1
SELECT
r.runID,
MAX(r.balance) as balance,
MIN(p.pc) as min_pc,
MAX(p.pc) as max_pc
FROM
tbl_results r
INNER JOIN
tbl_phases p ON p.runID_fk = r.runID
GROUP BY
r.runID
HAVING
MIN(p.pc)>10 AND MAX(p.pc) < 50;
runID
balance
min_pc
max_pc
2
5348
15
20
查询 #2
SELECT
r.runID,
MAX(r.balance) as balance,
MIN(p.pc) as min_pc,
MAX(p.pc) as max_pc
FROM
tbl_results r
INNER JOIN
tbl_phases p ON p.runID_fk = r.runID
GROUP BY
r.runID
HAVING
COUNT(CASE WHEN p.pc <= 10 or p.pc >= 50 THEN 1 END) =0;
runID
balance
min_pc
max_pc
2
5348
15
20
View working demo on DB Fiddle
更新了 Rahul Biswas 的评论
这可能很简单,但我想不通...
我有两个表:
tbl_results:
runID | balance |
1 | 3432
2 | 5348
3 | 384
tbl_phases:
runID_fk | pc |
1 | 34
1 | 2
1 | 18
2 | 15
2 | 18
2 | 20
3 | -20
3 | 10
3 | 60
我想获取以下记录集:runID、balance、min(pc)、max(pc) 仅 其中 pc>10 且 pc<50 将每个 runID 作为一个组,不包括任何关联 pc 值超出值范围的 runID。
我希望根据上述内容获得以下结果:
runID | balance | min_pc | max_pc
2 | 5348 | 15 | 20
... 因为 runID=1&3 的 pc 值超出了上述 pc 的数值范围。
提前致谢!
您可以根据您在 having 子句中的要求应用过滤器。您可以尝试以下方法。
查询#1
SELECT
r.runID,
MAX(r.balance) as balance,
MIN(p.pc) as min_pc,
MAX(p.pc) as max_pc
FROM
tbl_results r
INNER JOIN
tbl_phases p ON p.runID_fk = r.runID
GROUP BY
r.runID
HAVING
MIN(p.pc)>10 AND MAX(p.pc) < 50;
runID | balance | min_pc | max_pc |
---|---|---|---|
2 | 5348 | 15 | 20 |
查询 #2
SELECT
r.runID,
MAX(r.balance) as balance,
MIN(p.pc) as min_pc,
MAX(p.pc) as max_pc
FROM
tbl_results r
INNER JOIN
tbl_phases p ON p.runID_fk = r.runID
GROUP BY
r.runID
HAVING
COUNT(CASE WHEN p.pc <= 10 or p.pc >= 50 THEN 1 END) =0;
runID | balance | min_pc | max_pc |
---|---|---|---|
2 | 5348 | 15 | 20 |
View working demo on DB Fiddle
更新了 Rahul Biswas 的评论