订购内部联接的结果

问题描述 投票:-1回答:2

我目前有以下查询:

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

哪个给我这个结果:

如何撰写查询以获得前三名卖家以及2017年收到的奖励金额。以下是预期结果:

sql greatest-n-per-group
2个回答
0
投票

我猜你想按降序排列前3名卖家(即大多数奖项都在顶部)你可以做一个华丽的透视事件,过滤年份以获得更一般的查询,但我怀疑像这样的东西会更适合这个水平..

前3个子句在不同的DB引擎之间会有所不同

MSSQL:在SELECT之后直接使用TOP(nr)

Oracle:FETCH FIRST nr ROWS只在声明中持续

mysql:LIMIT nr在语句中的最后一个

等等....

对于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
投票

试试这个:

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

根据您的实际DBMS版本,您可能需要修改它。

© www.soinside.com 2019 - 2024. All rights reserved.