Mysql 如何从行中选择最大值并连接到另一个表
我正在尝试连接两个表,它们是关于values列的max值的。我想根据加入时的最大值产生如下所示的预期结果Mysql 如何从行中选择最大值并连接到另一个表,mysql,sql,hive,google-bigquery,Mysql,Sql,Hive,Google Bigquery,我正在尝试连接两个表,它们是关于values列的max值的。我想根据加入时的最大值产生如下所示的预期结果 select * from order ------------------------- | ID | value | Name | ------------------------- | 1 | 23 | REM | | 2 | 0 | SER | | 3 | 13 | MH | | 4 | 3 | MH
select * from order
-------------------------
| ID | value | Name |
-------------------------
| 1 | 23 | REM |
| 2 | 0 | SER |
| 3 | 13 | MH |
| 4 | 3 | MH |
| 5 | 1 | MP |
-------------------------
select * from product
-------------------------
| ID | value | Name |
-------------------------
| 1 | 2 | ABC |
| 2 | 2 | DEG |
| 3 | 17 | XYZ |
-------------------------
Desired result:
-------------------------
| ID | Value | Name |
-------------------------
| 1 | 23 | REM |
| 2 | 2 | DEG |
| 3 | 17 | XYZ |
| 4 | 3 | MH |
| 5 | 1 | MP |
-------------------------
我已经尝试了下面这样的方法,但它没有从其他表中获取值(名称)
SELECT
MAX(IF(a.value >b.value , a.value ,b.value )) AS Value
from order a left join product b on a.ID= b.ID
请建议如何从这两个表中获得预期结果。下面是针对BigQuery标准SQL的
#standardsql
select as value array_agg(struct(id, value, name) order by value desc limit 1)[offset(0)]
from
(
select * from `project.dataset.order`
union all
select * from `project.dataset.product`
)
group by id
有输出
您可以使用
完全连接来执行此操作:
select id,
(case when p.val is null or p.val < o.val then o.val else p.val end),
(case when p.val is null or p.val < o.val then o.name else p.name end)
from product p full join
order o
using (id);
选择id,
(p.val为空或p.val
我只是觉得这是思考问题的最简单方法。我只是想检查一下-您只是根据价值订购吗?没有将值与其他表进行比较?正如我在问题中提到的,我想与其他表进行比较,并取最大值,这正是它的实际情况。你看到它不是这样做的吗?然后提供示例:o)刚刚修改了有问题的示例仍然适用于我-获得预期结果-您看到了什么问题?