简体   繁体   English

如何从不同的列中获取对应的最大单元格值

[英]How to get corresponding cell value of max from different column

I am just trying to get those record who have highest discounted percentage.我只是想获得那些折扣率最高的记录。 For that i used max function.为此,我使用了最大 function。 But i am not able to fetch it's corresponding column(nPackageDiscountedAdultPrice) value.但我无法获取它对应的列(nPackageDiscountedAdultPrice)值。 I am getting wrong value in nPackageDiscountedAdultPrice column.(MYSQL).我在 nPackageDiscountedAdultPrice 列中得到错误的值。(MYSQL)。

select bs.nBusinessDetailsId,bs.strBusinessName,bs.strBusinessDescription,
pkg.nPackageDiscountedAdultPrice,pkg.nDiscountPercentage
from tblbusinessdetails bs
INNER JOIN tblvendorbusinesscategory vbs ON bs.nBusinessDetailsId=vbs.nBusinessDetailsId
INNER JOIN tblpackageassociatedoutlets pkga ON bs.nBusinessDetailsId=pkga.nOutletId
INNER JOIN tblpackagedetails pkg ON pkga.nPackageId=pkg.nPackageId
where vbs.nMainCategoryId=9;

By using above query i was getting repeated data like this:通过使用上面的查询,我得到了这样的重复数据: 在此处输入图像描述

For that i added group by clause for bs.nBusinessDetailsId.为此,我为 bs.nBusinessDetailsId 添加了 group by 子句。 Then i was getting 2nd highest nDiscountPercentage which is wrong.然后我得到了第二高的 nDiscountPercentage,这是错误的。 I want 1st highest nDiscountPercentage and it's corresponding nPackageDiscountedAdultPrice我想要第一个最高的 nDiscountPercentage,它是对应的 nPackageDiscountedAdultPrice

Here is my query.这是我的查询。

select bs.nBusinessDetailsId,bs.strBusinessName,bs.strBusinessDescription,
pkg.nPackageDiscountedAdultPrice,max(pkg.nDiscountPercentage)
from tblbusinessdetails bs
INNER JOIN tblvendorbusinesscategory vbs ON bs.nBusinessDetailsId=vbs.nBusinessDetailsId
INNER JOIN tblpackageassociatedoutlets pkga ON bs.nBusinessDetailsId=pkga.nOutletId
INNER JOIN tblpackagedetails pkg ON pkga.nPackageId=pkg.nPackageId
where vbs.nMainCategoryId=9 group by bs.nBusinessDetailsId;

I guess you want the nPackageDiscountedAdultPrice value for the row with the largest nDiscountPercentage .我猜你想要nDiscountPercentage最大的行的nPackageDiscountedAdultPrice值。

That's best retrieved with a fairly tricky subquery最好使用相当棘手的子查询来检索

              SELECT a.* 
                FROM tblpackagedetails a
                JOIN (SELECT MAX(nDiscountPercentage) nDiscountPercentage,
                             nPackageId
                        FROM tblpackagedetails
                       GROUP BY nPackageId
                     ) b ON a.nDiscountPercentage = b.nDiscountPercentage
                        AND a.nPackageId = b.nPackageId

You can test this.你可以测试一下。 Its inner query finds the largest discount for each package.它的内部查询找到每个 package 的最大折扣。 Then it uses that value in a JOIN to give you a subset of the rows from tblpackagedetails having the largest percentage discount for each nPackageId .然后它在 JOIN 中使用该值为您提供nPackageId tblpackagedetails最大百分比折扣的行的子集。 If more than one row has the same exact largest discount, you'll get them all and have duplicates in your final result set.如果多行具有相同的最大折扣,您将获得所有这些并在最终结果集中有重复项。

Then you join it in to your main query.然后你将它加入到你的主查询中。

select bs.nBusinessDetailsId,bs.strBusinessName,bs.strBusinessDescription,
       pkg.nPackageDiscountedAdultPrice,pkg.nDiscountPercentage
  from tblbusinessdetails bs
 INNER JOIN tblvendorbusinesscategory vbs 
            ON  bs.nBusinessDetailsId=vbs.nBusinessDetailsId
 INNER JOIN tblpackageassociatedoutlets pkga 
            ON bs.nBusinessDetailsId=pkga.nOutletId
 INNER JOIN ( SELECT a.* 
                FROM tblpackagedetails a
                JOIN (SELECT MAX(nDiscountPercentage) nDiscountPercentage,
                             nPackageId
                        FROM tblpackagedetails
                       GROUP BY nPackageId
                     ) b ON a.nDiscountPercentage = b.nDiscountPercentage
                        AND a.nPackageId = b.nPackageId
            ) pkg ON pkga.nPackageId=pkg.nPackageId
 where vbs.nMainCategoryId=9;

Notice that the MAX()... GROUP BY... aggregate is moved to the subquery.请注意, MAX()... GROUP BY...聚合已移至子查询。

You should join the subquery for maxPerc group by nBusinessDetailsId (without the price)您应该通过 nBusinessDetailsId 加入 maxPerc 组的子查询(不含价格)

select  t.nBusinessDetailsId
        ,t.strBusinessName
        ,t.strBusinessDescription
        ,pkg.nPackageDiscountedAdultPrice
        ,t.maxPerc
from (
    select bs.nBusinessDetailsId
        , bs.strBusinessName
        , bs.strBusinessDescription
        , max(pkg.nDiscountPercentage) maxPerc
    from tblbusinessdetails bs
    INNER JOIN tblvendorbusinesscategory vbs ON bs.nBusinessDetailsId=vbs.nBusinessDetailsId
    INNER JOIN tblpackageassociatedoutlets pkga ON bs.nBusinessDetailsId=pkga.nOutletId
    INNER JOIN tblpackagedetails pkg ON pkga.nPackageId=pkg.nPackageId
    where vbs.nMainCategoryId=9 
    group by bs.nBusinessDetailsId
) t  
INNER JOIN tblpackageassociatedoutlets pkga ON t.nBusinessDetailsId=pkga.nOutletId
INNER JOIN tblpackagedetails pkg ON pkga.nPackageId=pkg.nPackageId
    AND t.maxPerc =pkg.nDiscountPercentage

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM