如何在SQL Server 2019上对每个查询系统进行增量排名?
目前在SQL Server 2019上,我有以下代码:如何在SQL Server 2019上对每个查询系统进行增量排名?,sql,sql-server,Sql,Sql Server,目前在SQL Server 2019上,我有以下代码: 选择 dbo.GroundTruth.QueryId, dbo.GroundTruth.Q0, dbo.GroundTruth.Id, RANK()超过(按dbo.GroundTruth.Similarity DESC排序)作为秩, dbo.GroundTruth.Similarity, dbo.GroundTruth.StValue来自GroundTruth dbo.GroundTruth.QueryID ASC命令 返回的结果如下:
选择
dbo.GroundTruth.QueryId,
dbo.GroundTruth.Q0,
dbo.GroundTruth.Id,
RANK()超过(按dbo.GroundTruth.Similarity DESC排序)作为秩,
dbo.GroundTruth.Similarity,
dbo.GroundTruth.StValue来自GroundTruth
dbo.GroundTruth.QueryID ASC命令
返回的结果如下:
2639 Q0 68556 118406 78.29591 STANDARD
2639 Q0 68582 143678 77.34721 STANDARD
264 Q0 6952 91193 79.59099 STANDARD
264 Q0 6951 207182 75.00000 STANDARD
264 Q0 6950 18046 88.25763 STANDARD
2640 Q0 68598 23812 87.26044 STANDARD
2640 Q0 68600 23776 87.27147 STANDARD
2641 Q0 68662 39200 84.62848 STANDARD
2641 Q0 68609 177816 76.06838 STANDARD
但是,我希望QueryID
(第1)列的顺序是递增的(1、2、3、4、5,…),而不是当前的形式(1、10、100、1000、10000),并且我希望rank
(第4)列具有如下列:
QueryID ... DocID ... rank ...
1 ... 123 ... 1 ...
1 ... 247 ... 2 ...
1 ... 9876 ... 3 ...
2 ... 23 ... 1 ...
2 ... 17 ... 2 ...
2 ... 69 ... 3 ...
2 ... 09 ... 4 ...
SQL Server 2019中是否有能够执行此操作的属性,或者它是否需要包含多个函数?查询ID似乎是一个字符串。您可以将其转换为整数。对于排名,您需要按照
QueryId
进行排序,因此使用分区依据
:
SELECT gt.*,
RANK() OVER (PARTITION BY gt.QueryId ORER BY gt.SImilarity DESC) as rank
FROM GroundTruth gt
ORDER BY TRY_CONVERT(int, gt.QueryID) ASC;
(这使用gt.*
来关注您在问题中关心的列。不过,一般来说,使用表别名可以使查询更易于编写和读取。)
如果希望用枚举值实际替换QueryId
,请使用:
SELECT DENSE_RANK() OVER (ORDER BY gt.QueryId)
我不确定您是否希望基于字符串或字符串的数值进行排序。对于数字排序,您可以使用:
SELECT DENSE_RANK() OVER (ORDER BY CONVERT(int, gt.QueryId))
(所有这些都假设
int
对于值来说足够大。如果不使用NUMERIC
/DECIMAL
)供参考,应避免使用。坚持给你的对象加上别名,并用它们来限定你的列。并且用一致的风格书写。在FROM子句中,您没有对表进行模式限定,但对列进行模式限定。如果某个内容是数字,请将其存储为数字。不要在varchar
列中存储数字