php - 如何在表中找到最大值,如果有相同的值,则从找到的数据中的最小ID中检索数据(mysql 5.5.36)
问题描述
我有两张表,分别带有身份和结果的名称。我想根据具有最大值的rs_val列检索所有数据,然后按列identities.idn_year和identities.idn_tag对数据进行分组
如果最大值相同,则以相同数据中最小的rs_id显示数据,但仍显示不同的数据年份和标签
**Table identities**
idn_kode | idn_name | idn_year | idn_tag
IDN.001 Andi 2017 3
IDN.002 sarah 2017 3
IDN.003 Jhon 2017 3
IDN.004 Doe 2018 5
IDN.005 Mark 2018 5
IDN.006 Sisca 2018 5
**Table result**
rs_kode | idn_kode | rs_id | rs_val
RS.001 IDN.002 2 73
RS.002 IDN.004 4 90
RS.003 IDN.005 5 90
RS.004 IDN.006 6 85
RS.005 IDN.003 3 100
RS.006 IDN.001 1 65
我尝试使用此查询
SELECT * FROM (SELECT * FROM result ORDER BY rs_val DESC ) x INNER JOIN identities a on x.idn_kode = a.idn_kode GROUP BY a.idn_yer, a.idn_tag
**the results of the query above**
idn_name | idn_year | idn_tag | id | rs_val
Jhon 2017 3 3 100
Mark 2018 5 5 90
预期成绩
idn_name | idn_year | idn_tag | rs_id | rs_val
Doe 2018 5 4 90
Jhon 2017 3 3 100
请问,有人可以帮助我吗?
解决方案
对于 MySql 8.0+,您可以使用ROW_NUMBER()
:
with cte as (
select i.idn_name, i.idn_year, i.idn_tag, r.rs_id, r.rs_val,
row_number() over (partition by i.idn_year, i.idn_tag order by r.rs_val desc, r.rs_id) rn
from identities i inner join result r
on r.idn_kode = i.idn_kode
)
select idn_name, idn_year, idn_tag, rs_id, rs_val
from cte
where rn = 1;
请参阅演示。
结果:
| idn_name | idn_year | idn_tag | rs_id | rs_val |
| -------- | -------- | ------- | ----- | ------ |
| Jhon | 2017 | 3 | 3 | 100 |
| Doe | 2018 | 5 | 4 | 90 |
对于 MySql 5.5,请使用以下查询:
select i.idn_name, i.idn_year, i.idn_tag, min(r.rs_id) rs_id, t.val
from identities i
inner join result r on r.idn_kode = i.idn_kode
inner join (
select i.idn_year, i.idn_tag, max(r.rs_val) val
from identities i inner join result r
on r.idn_kode = i.idn_kode
group by i.idn_year, i.idn_tag
) t on t.idn_year = i.idn_year and t.idn_tag = i.idn_tag and t.val = r.rs_val
group by i.idn_year, i.idn_tag, t.val
要使此代码正常工作,您必须[ONLY_FULL_GROUP_BY][2]
禁用 SQL 模式。
请参阅演示。
推荐阅读
- flutter - 无法构建用于发布的颤振 apk
- python - 构建预测 Pandas DataFrame
- h2o - H2O 目标编码器 Mojo 模型抛出 NULL 指针异常
- python - 在 Maya 中使用 Python 沿 nurbsPlane 创建毛囊以获得丝带 Spine?
- tensorflow - 如何使用 tensorFlow 2 Object Detection API 绘制ground truth bbox?
- python - 删除不和谐的默认帮助命令
- python - 如何在请求中包含 Origin?
- java - 错误如下:线程“main”中的异常 java.lang.ArrayIndexOutOfBoundsException:索引 0 超出 Percolation.main 中长度 0 的范围
- css - 特定类中所有 td 和 th 元素的单个 CSS 选择语句
- azure-pipelines - YAML 抱怨“意外的属性扩展”