mysql - 我如何获得 MySQL JOIN 的结果,其中记录符合联接表中的值标准?
问题描述
这可能很简单,但我无法弄清楚......
我有两张桌子:
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) only where pc>10 and pc<50 for each runID as a group,不包括任何关联的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;
运行ID | 平衡 | 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;
运行ID | 平衡 | min_pc | max_pc |
---|---|---|---|
2 | 5348 | 15 | 20 |
更新了来自 Rahul Biswas 的评论
推荐阅读
- android - android中的自定义组项目recyclerview
- android - Android HTTP 请求失败
- ncurses - ncurses:如何刷新单个面板
- oracle - Sharepoint webpart 2016 和 oracle db 9i
- javascript - 在 JSON 文件中使用 JavaScript 变量
- sql - DISTINCT 减慢了我的查询,多列
- javascript - 在 TypeScript 中使用变量属性名称定义对象类型
- android - 在android中将建议的宽度和高度设置为自定义视图
- ios - 如何使用 iOS Swift 中的回调在视图控制器和容器视图之间传递数据?
- javascript - chart.js 如何显示最大值?