SELECT TOP 5 WITH TIES EmpNumber,EmpName
FROM Employee
Order By EmpNumber DESC
以上查询返回五个以上的结果,使用“With Ties”关键字SQL查询。
答案 0 :(得分:47)
当您想要返回两个或多个与最后一个位置相关的行时使用 在有限的结果集中。
请注意示例
我们有一张桌子,有6个1到4和5个两次。
正在运行
SELECT TOP 5 WITH TIES *
FROM MyTable
ORDER BY ID;
返回6行,因为最后一行被绑定(存在多次。)
在哪里
SELECT TOP 5 WITH TIES *
FROM MyTable
ORDER BY ID DESC;
只返回5行,因为最后一行(本例中为2)只存在一次。
答案 1 :(得分:7)
检查此查询并更加明确。
SELECT TOP 5 WITH TIES *
FROM MyTable
ORDER BY ID;
结果: - 1 2 3 4 五 5
SELECT TOP 5 *
FROM MyTable
ORDER BY ID;
结果: - 1 2 3 4 5
答案 2 :(得分:5)
为了便于理解,让我们用Northwind DB上的一个简单实例进行解释。假设您需要相同价格的产品。
select
UnitPrice
,count(UnitPrice) as PriceCount
from Products
group by
UnitPrice
order by 2 desc
例如,您现在知道当前有 4 种产品的价格为 10,但您仍会得到 2 行 - 与您使用 top
子句发送的结果一样多。
select top 2 UnitPrice,* from Products where UnitPrice=10
对于所有匹配的行,您必须发送带有子句 with ties
的查询。尽管您发送了 top 2
,但您将获得更多匹配的行。
select top 2 with ties UnitPrice,* from Products where UnitPrice=10 order by 1
https://docs.microsoft.com/en-us/sql/t-sql/queries/top-transact-sql?view=sql-server-ver15#arguments
<块引用>返回与有限中最后一位并列的两行或更多行 结果集。您必须将此参数与 ORDER BY 子句一起使用。和 TIES 可能会导致返回的行数多于指定的值 表达。例如,如果表达式设置为 5 但另外两个 行匹配第 5 行 ORDER BY 列的值,结果集 将包含七行。
您只能使用 WITH TIES 参数指定 TOP 子句 SELECT 语句,并且仅当您还指定了 ORDER BY 条款。绑定记录的返回顺序是任意的。订购者 不影响此规则。
答案 3 :(得分:3)
根据BOL“WITH TIES指定从基本结果集返回其他行,其中ORDER BY列中的相同值显示为TOP n(PERCENT)行的最后一行。 TOP ... WITH TIES只能在SELECT语句中指定,并且只有在指定了ORDER BY子句时才能指定。 “
参考此链接这可能有助于Code project
答案 4 :(得分:1)
WITH TIES
允许您返回更多行,这些行的值与有限结果集中的最后一行相匹配。请注意,WITH TIES
可能导致返回的行多于表达式中指定的行。
要返回哪些行的选择是不确定。
这意味着,如果在不更改基础数据的情况下再次运行查询,理论上您将获得一组不同的三行。
实际上,行的选择将取决于以下物理条件:
如果您多次实际运行查询,只要这些物理条件没有变化,您很有可能会保持相同的结果。但是至关重要的是要从关系模型中了解“物理数据独立性”原理,并要记住,在逻辑级别上,您无法保证可重复的结果。如果不指定顺序,则应将顺序视为任意顺序,从而导致不确定的行选择。
您当前的结果如下:
EmpNumber EmpName Ranking
11 Maria 1
23 José 2
456 Pedro 3
456 Pedro 3 --WITH TIES
您的表可能包含重复的行,或者可能具有历史行,因为通常EmpNumber是唯一的。
答案 5 :(得分:0)
假设我们有一个名为myTable的表,其中包含以下数据:
1个怪胎10000
4芬奇10000
2 RR 6000
3大卫16000
5莱斯利7000
6个沃森10000
查询: 从myTable中选择*
按工资顺序排序
仅获取前3行;
输出: 我们只有Salary中降序排列的前三行
3大卫16000
1个怪胎10000
4芬奇10000
注意:在上面的结果中,我们获得了前3行,按薪水以降序排列,但还有另外一行薪水相同,即名称为Watson和Salary 10000的行,但是它没有出现,因为我们仅将输出限制为前三行。但这并不是最佳选择,因为在大多数情况下,在实时应用程序中,我们还需要显示绑定的行。
现实生活中的例子 –假设我们有10位赛车手参加比赛,而我们只有3个奖项,即第一,第二,第三名,但假设第3和第4赛车手同时完成了比赛,所以在这种情况下,我们在3和4之间有一个平局,这就是为什么两个人都持有排名3的原因。
答案 6 :(得分:0)
来自here
使用 TOP WITH TIES (包含领带的顶部)包括与 最后一行
如果您想使用领带最多,则必须使用订购依据。
创建表
CREATE TABLE [dbo].[Products](
[Id] [int] IDENTITY(1,1) NOT NULL,
[ProductName] [nvarchar](50) NULL,
[Price] [float] NULL)
GO
下面说明了将行插入到现有表中的INSERT语句
INSERT INTO [dbo].[Products] VALUES ('Bicycle 1' , 258.2)
INSERT INTO [dbo].[Products] VALUES ('Bicycle 2' , 265.3)
INSERT INTO [dbo].[Products] VALUES ('Bicycle 3' , 267.8)
INSERT INTO [dbo].[Products] VALUES ('Bicycle 4' , 268.9)
INSERT INTO [dbo].[Products] VALUES ('Bicycle 5' , 267.9)
INSERT INTO [dbo].[Products] VALUES ('Bicycle 6' , 267.9)
GO
然后
SELECT TOP 4 WITH TIES
ProductName, Price
FROM Products
ORDER BY Price
在此示例中,这两种昂贵的产品的标价为267.9。由于该语句使用了 TOP WITH TIES ,因此还返回了另一种产品,其价格价格与第四种产品相同。
答案 7 :(得分:0)
据我对WITH TIES子句的理解, 如果要[重复值],该值在订购依据中指定。
答案 8 :(得分:0)
WITH TIES 选项对于 TOP() 谓词很重要。它使最后一个地方 如果这些行在 ORDER BY 中使用的列中具有相等的值,则包括多行 子句。
正如您在第一张图片中看到的,最后一行在 db 中有更多相同的值。
答案 9 :(得分:-1)
SELECT * from myTable order by rank desc fetch first 3 rows With Ties;
给予
ID NAME Rank
--------------------------
3 Dhoni 1
1 Geeks 2
6 Watson 3 **// We get Tied Row also**
4 Finch 3