簡體   English   中英

如何從不同的列中獲取對應的最大單元格值

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

我只是想獲得那些折扣率最高的記錄。 為此,我使用了最大 function。 但我無法獲取它對應的列(nPackageDiscountedAdultPrice)值。 我在 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;

通過使用上面的查詢,我得到了這樣的重復數據: 在此處輸入圖像描述

為此,我為 bs.nBusinessDetailsId 添加了 group by 子句。 然后我得到了第二高的 nDiscountPercentage,這是錯誤的。 我想要第一個最高的 nDiscountPercentage,它是對應的 nPackageDiscountedAdultPrice

這是我的查詢。

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;

我猜你想要nDiscountPercentage最大的行的nPackageDiscountedAdultPrice值。

最好使用相當棘手的子查詢來檢索

              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

你可以測試一下。 它的內部查詢找到每個 package 的最大折扣。 然后它在 JOIN 中使用該值為您提供nPackageId tblpackagedetails最大百分比折扣的行的子集。 如果多行具有相同的最大折扣,您將獲得所有這些並在最終結果集中有重復項。

然后你將它加入到你的主查詢中。

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;

請注意, MAX()... GROUP BY...聚合已移至子查詢。

您應該通過 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