如何使用最高值连接表?

时间:2017-09-20 19:15:45

标签: mysql sql database

我根据id_order加入两个表格,并且它是一对多的关系。我的查询如下:

SELECT
ps_order_detail.product_name,
ps_order_history.id_order_state
FROM ps_order_detail JOIN
ps_order_history using (id_order)

问题是它返回所有id_order_state值,而我只想要最高值。我尝试了max(ps_order_history.id_order_state),但它只返回一个值最高的记录,我希望每个id_order的值最高。我该怎么办?

2 个答案:

答案 0 :(得分:3)

您需要将aggregate function max与group by子句一起使用。我不确定您使用的是哪种SQL服务器。对于MS SQL Server,以下查询将执行您想要的操作。

SELECT product_name, MAX(id_order_state) 
FROM ps_order_detail 
GROUP BY product_name

答案 1 :(得分:1)

一种方法是为每个订单生成最大ID_ORDER_STATE的子集,并将其添加到连接中。

SELECT ps_order_detail.product_name
     , ps_order_history.id_order_state
FROM ps_order_detail 
INNER JOIN ps_order_history using (id_order)
INNER JOIN (SELECT max(ID_ORDER_STATE) MOS, ID_ORDER 
            FROM ps_order_history
            GROUP BY ID_ORDER) Z
 on Z.MOS      = ps_order_history.id_order_state
and Z.ID_ORDER = ps_order_history.id_order

此方法允许您从与最大记录相关的历史记录中返回其他数据;但如果你需要的只是每个产品名称的最大订单状态

,那就太过分了

其他方法涉及使用交叉应用或分析功能,但mySQL不支持这些方法。

我想你也可以使用一个exists和correlate子查询......但是我发现上面的方法很简洁。