我根据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
的值最高。我该怎么办?
答案 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子查询......但是我发现上面的方法很简洁。