I am just trying to get those record who have highest discounted percentage. For that i used max function. But i am not able to fetch it's corresponding column(nPackageDiscountedAdultPrice) value. I am getting wrong value in nPackageDiscountedAdultPrice column.(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. Then i was getting 2nd highest nDiscountPercentage which is wrong. I want 1st highest nDiscountPercentage and it's corresponding 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
.
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. 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
. 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.
You should join the subquery for maxPerc group by nBusinessDetailsId (without the price)
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
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.