我目前有以下查询:
select X.sellerID, x.Category, y.Award_Year, Y.Award
from Y
inner join
X on Y.Seller_ID=X.sellerID
哪个给我这个结果:
如何编写查询以获取前3名卖家以及2017年获得的奖励金额。以下是预期结果:
答案 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