Как получить соответствующее значение ячейки max из другого столбца - PullRequest
0 голосов
/ 08 мая 2020

Я просто пытаюсь получить те записи, у которых самый высокий процент скидки. Для этого я использовал функцию max. Но я не могу получить значение соответствующего столбца (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;

Используя вышеуказанный запрос, я получал повторяющиеся данные, например: enter image description here

Для этого я добавил пункт group by для bs.nBusinessDetailsId. Затем я получал 2-й по величине nDiscountPercentage, что неверно. Мне нужен 1-й по величине 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;

Ответы [ 2 ]

0 голосов
/ 08 мая 2020

Вы должны присоединиться к подзапросу для группы maxPer c по nBusinessDetailsId (без цены)

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
0 голосов
/ 08 мая 2020

Думаю, вам нужно значение nPackageDiscountedAdultPrice для строки с наибольшим nDiscountPercentage.

Лучше всего получить с помощью довольно сложного подзапроса

              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

Вы можете это проверить. Его внутренний запрос находит самую большую скидку для каждого пакета. Затем он использует это значение в JOIN, чтобы предоставить вам подмножество строк из tblpackagedetails с наибольшей процентной скидкой для каждой nPackageId. Если в нескольких строках указана одинаковая самая большая скидка, вы получите их все, а в окончательном наборе результатов будут дубликаты.

Затем вы присоединяете его к своему основному запросу.

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 ... перемещен в подзапрос.

...