在 SQL 查询的 SELECT 语句中 WITHTIES 关键字的用途是什么?

SELECT TOP 5 WITH TIES EmpNumber,EmpName
FROM Employee
Order By EmpNumber DESC

以上查询返回五个以上结果,有什么用“ With Ties”关键字 SQL 查询。

83303 次浏览

来自 TOP (Transact-SQL)

当要返回与最后一名相关的两行或多行时使用 在有限的结果集中。

注意这个例子

SQL Fiddle DEMO

我们有一张六人桌,分别是1到4和5人两次。

跑步

SELECT TOP 5 WITH TIES *
FROM MyTable
ORDER BY ID;

返回6行,因为最后一行被绑定(存在多次)

在哪里

SELECT TOP 5 *
FROM MyTable
ORDER BY ID;

只返回5行,因为最后一行(本例中为2行)只存在一次。

检查这个查询,将会更清楚。

SELECT TOP 5 WITH TIES *
FROM MyTable
ORDER BY ID;

结果:- 1 2 3 4 5 5

SELECT TOP 5 *
FROM MyTable
ORDER BY ID;

结果: -12345

假设我们有一个名为 myTable 的表,其数据如下:

工资

1个书呆子10000

4芬奇10000

2 RR 6000

3大卫16000

5 Lesley 7000

6华生10000

质疑: 从 myTable 中选择 *

按工资级别订货

只取前3行;

产出: 我们只得到了前三行按工资递减顺序排列

工资

3大卫16000

1个书呆子10000

4芬奇10000

注意: 在上面的结果中,我们得到了前3行,按照 Salary 的递减顺序排列,但是我们还有一行的薪水相同,即名为 Watson 和 Salary 10000的行,但是它没有出现,因为我们只限制了前3行的输出。但这并不是最优的,因为在实时应用程序中,大多数时候我们还需要显示绑定的行。

现实生活中的例子 -假设我们有10个参赛者,我们只有3个奖品,即,第一,第二,第三,但假设,参赛者3和4在同一时间完成了比赛,所以在这种情况下,我们有一个3和4之间的平局,这就是为什么都是位置3的持有者。

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

来自 给你

中的值匹配的行 最后一排

如果要使用 打好领带,则必须使用 订购

创建表

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。因为语句使用了 打好领带,所以它返回了另一个产品,其列表 价格与第四个产品相同。

here

根据我对 WITHTIES 条款的理解, 如果您想要[重复值] ,则在 OrderBy 中指定的列。

WITH TIES允许返回更多行,其值与有限结果集中的最后一行相匹配。请注意,WITH TIES可能导致返回的行数超过您在表达式中指定的行数。

要返回的行的选择是 不确定性
这意味着,如果再次运行查询,而不更改基础数据,理论上可以得到不同的三行集。
在实践中,行的选择将取决于物理条件,如:

  • 优化选择
  • 存储引擎的选择
  • 数据布局
  • 等等。

如果实际上多次运行查询,只要这些物理条件不变,就有可能得到相同的结果。但是从关系模型中理解“物理数据独立性”原则是至关重要的,并且要记住,在逻辑层面上,你不能保证可重复的结果。如果没有排序规范,您应该认为顺序是任意的,从而导致不确定的行选择。

你目前的结果如下:

EmpNumber EmpName  Ranking
11        Maria    1
23        José     2
456       Pedro    3
456       Pedro    3 --WITH TIES

您的表可能包含重复的行,或者可能包含历史行,因为 EmpNumber 通常是唯一的。

来自 参考文献

为了便于理解,让我们用 Northwind DB上的一个简单例子来解释一下。

select
UnitPrice
,count(UnitPrice) as PriceCount
from Products
group by
UnitPrice
order by 2 desc

with ties-1]

您现在知道,目前有4个产品的价格是10,例如,但您仍然会得到2行-多少结果,因为您发送与 top条款-。

select top 2 UnitPrice,* from Products where UnitPrice=10

with-ties2]

您必须为所有匹配的行提交带有 with ties子句的查询。即使您发送了 top 2,您也会得到更多的匹配行。

select top 2 with ties UnitPrice,* from Products where UnitPrice=10 order by 1

with ties]

Https://learn.microsoft.com/en-us/sql/t-sql/queries/top-transact-sql?view=sql-server-ver15#arguments

返回两行或多行,这些行在有限的 必须将此参数与 ORDERBY 子句一起使用 TIES 可能导致返回的行数超过 例如,如果将 Expression 设置为5,但是另外两个 行与第5行中的 ORDERBY 列的值匹配,即结果集 将包含七行。

中使用 WITHTIES 参数指定 TOP 子句 SELECT 语句,并且仅当您还指定了 ORDERBY 子句。绑定记录的返回顺序是任意的 并不影响这条规则。

WITHTIES 选项对于 TOP ()谓词很重要 如果这些行在 ORDERBY 中使用的列中具有相同的值,则包含多个行 条款。

在此输入图像描述

在此输入图像描述

As you see in the first image , the last row has more identical values in the db .. then in the next picture the with ties get all the rows identical with the same value in the column selected in the "order by"