Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/58.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 显示最大值_Mysql_Sql - Fatal编程技术网

Mysql 显示最大值

Mysql 显示最大值,mysql,sql,Mysql,Sql,我想显示具体用户的最大保证。例如,用户购买了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 guara

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

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

我认为最简单的方法是
子字符串\u index()
/
组\u 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
                    );
我认为这是有效的

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 = ''

啊,废话。戈登来了。对我来说,不再有SQL信誉:/n允许“-”作为表/列标识符可能会造成灾难性的损害