Sql 内部联接结果的排序
我目前有以下疑问:Sql 内部联接结果的排序,sql,greatest-n-per-group,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 这给了我这个结果: 如何编写查询以获得2017年前三名卖家和获得的奖励金额。预期结果如下: 试试这个: SELECT TOP(3) A.Id, A.category, count(A.Award) AS 'Award in 2017' FROM ( SELECT
select X.sellerID, x.Category, y.Award_Year, Y.Award
from Y
inner join
X on Y.Seller_ID=X.sellerID
这给了我这个结果:
如何编写查询以获得2017年前三名卖家和获得的奖励金额。预期结果如下:
试试这个:
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版本,您可能需要对其进行修改。我想您希望按降序排列前三名卖家(即前三名中的大多数奖项),并且您可以使用“年度筛选”进行华丽的透视,以获得更一般的查询,但我怀疑类似于此的查询更适合此级别 top 3条款在不同的DB引擎之间会有所不同 MSSQL:选择后直接顶部(nr) Oracle:FETCH FIRST nr ROWS ONLY last in语句 mysql:LIMIT nr last in语句 等等 对于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
这里的大多数人希望示例表数据和预期结果是格式化文本,而不是图像。您需要在这里使用GROUPBY、Having和ORDERBY子句。你需要阅读他们并运用知识来解决这个问题。为什么卖家id 10不在预期输出中?该卖家在2017年也有一个奖项,就像卖家4和卖家9一样-如果卖家拥有相同数量的奖项,那么将其从名单中删除的逻辑是什么?感谢您的帮助。我对这一点还是新手,但看看你的问题,我学到了很多。@CecilHigwind,没问题。让我知道它是否有效。你使用的是什么数据库系统?我以为是SQL Server,非常感谢。对于像我这样的新手来说,你的查询很容易理解。@user1694674。您应该学会使用比
x
和y
更好的表别名。