我目前有以下查询:
select X.sellerID, x.Category, y.Award_Year, Y.Award
from Y
inner join
X on Y.Seller_ID=X.sellerID
哪个给我这个结果:
如何撰写查询以获得前三名卖家以及2017年收到的奖励金额。以下是预期结果:
我猜你想按降序排列前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
试试这个:
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版本,您可能需要修改它。