Заказ результатов Inner join - PullRequest
0 голосов
/ 22 марта 2019

У меня сейчас следующий запрос:

select X.sellerID, x.Category, y.Award_Year, Y.Award
from Y
inner join
    X on Y.Seller_ID=X.sellerID

которые дают мне этот результат:

enter image description here

Как мне написать запрос, чтобы получить 3 лучших продавца и сумму наград, полученных в 2017 году. Ожидается следующий результат:

enter image description here

Ответы [ 2 ]

0 голосов
/ 22 марта 2019

Полагаю, вы хотите, чтобы первые 3 продавца были отсортированы по убыванию (то есть большинство наград в топе), и вы могли бы сделать броскую сводку с фильтрацией по году, чтобы получить более общий запрос, но я подозреваю, что что-то вроде этого будет болееподходит на этом уровне ..

Предложение 3 верхних будет отличаться для разных БД

MSSQL: TOP (nr) непосредственно после SELECT

Oracle: FETCH FIRST nr ROWS ONLYпоследний в операторе

mysql: LIMIT nr последний в операторе

и т. д. *

FOR MSSQL это будет что-то вроде

SELECT TOP (3) sellerID, Category, Award_Year, COUNT(Award_Year) Awards
from Y y 
inner join
    X x on y.Seller_ID=x.sellerID
WHERE Award_Year = 2017
GROUP BY x.sellerID, x.Category, y.Award_Year
Order By COUNT(Award_Year) DESC
0 голосов
/ 22 марта 2019

Попробуйте это:

SELECT TOP(3) A.Id, A.category, count(A.Award) AS 'Award in 2017'
FROM (
    SELECT X.sellerID AS ID, x.Category, y.Award_Year, Y.Award
    FROM Y
    INNER JOIN X on Y.Seller_ID=X.sellerID
) A
GROUP BY A.Id, A.category
ORDER BY count(A.Award) DESC

В зависимости от текущей версии СУБД, вам может потребоваться изменить ее.

...