Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/79.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 内部联接结果的排序_Sql_Greatest N Per Group - Fatal编程技术网

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
更好的表别名。