显示最大

sq1bmfud  于 2021-06-17  发布在  Mysql
关注(0)|答案(2)|浏览(178)

我想显示最大的保证,具体用户有。例如,用户购买了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`)

此查询显示所有产品及其保证。

mspsb9vt

mspsb9vt1#

我想它有用。

select [User].Name as [UserName],
     Product.MaxGuarantee,
     Product.Name as Product_Name
from [Users] [User]
     left join Transactions [Transaction]
          on [Transaction].[User] = [User].ID
     cross apply(
          select max(guarantee) MaxGuarantee, Name
     from Products
     where ID = [Transaction].Product
     ) Product
where [User].ID = ''
hs1rzwqc

hs1rzwqc2#

我认为最简单的方法是 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
                    );

相关问题