我想显示特定用户拥有的最大保证。例如用户购买了 3 件有 1、2、5 年保修的商品。所以我想展示该产品的 5 年保修和名称。 我做了子查询,以防很少有产品具有相同的保证。
SELECT t.`id-user`, name, guarantee FROM transactions t
JOIN user u ON `t`.`id-user` = `u`.`id-user`
JOIN products p ON `p`.`id-product = `t`.`id-product`
WHERE guarantee = (SELECT MAX(p2.guarantee)
FROM products p2
WHERE `p2`.`id-product` = `p`.`id-product`)
此查询显示所有产品及其保证。
最佳答案
我认为最简单的方法是获取与最大值/最小值相关的值的 substring_index()
/group_concat()
方法:
SELECT t.iduser, u.name,
MAX(p.guarantee) as guarantee,
SUBSTRING_INDEX(GROUP_CONCAT(p.name ORDER BY p.guarantee DESC), ',', 1)
FROM transactions t JOIN
user u
ON t.iduser = u.iduser JOIN
products p
ON p.idproduct = t.idproduct
GROUP BY t.iduser, u.name;
您也可以使用您的方法,但相关子查询很棘手:
SELECT t.iduser, u.name, p.guarantee, p.name
FROM transactions t JOIN
user u
ON t.iduser = u.iduser JOIN
products p
ON p.idproduct = t.idproduct
WHERE p.guarantee = (SELECT MAX(p2.guarantee)
FROM transactions t2 JOIN
products p2
ON p2.idproduct = t2.idproduct
WHERE t2.iduser = u.iduser
);
关于mysql - 显示最大值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53950310/