订购内部联接的结果

时间:2019-03-22 08:58:29

标签: sql greatest-n-per-group

我目前有以下查询:

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 :(得分: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版本,您可能需要对其进行修改。

答案 1 :(得分:0)

我想您希望按降序排列排在前三位的卖家(即多数奖项排在首位),并且可以对年份进行过滤来做一个浮华的枢轴操作,以获得更一般的查询,但是我怀疑这样的事情会更多合适的水平。

不同数据库引擎之间的前3个子句将有所不同

MSSQL:SELECT之后直接返回TOP(nr)

Oracle:首先获取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