programing

SQL 쿼리의 SELECT 문에서 WITH TIES 키워드는 무엇을 사용합니까?

stoneblock 2023. 6. 28. 21:17

SQL 쿼리의 SELECT 문에서 WITH TIES 키워드는 무엇을 사용합니까?

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

위의 쿼리는 5개 이상의 결과를 반환합니다. "With Ties" 키워드 SQL Query의 용도는 무엇입니까?

원본 TOP(트랜잭션-SQL)

제한된 결과 집합에서 마지막으로 동점인 행을 두 개 이상 반환하려는 경우에 사용됩니다.

예를 참고하십시오.

SQL Fiddle 데모

1번부터 4번까지 6개의 테이블이 있고, 5번은 2번이 있습니다.

입니다.

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

마지막 행이 동점일 때 6개의 행을 반환합니다(두 번 이상 반복).

반면에.

SELECT TOP 5 *
FROM MyTable 
ORDER BY ID;

마지막 행(이 경우 2개)이 한 번만 존재하기 때문에 5개 행만 반환합니다.

여기서

TOP WITH TIES를 사용하여 마지막 행의 값과 일치하는 행 포함

TOP WITH TIES를 사용하려면 order by를 사용해야 합니다.

테이블 만들기

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가 사용되었기 때문에 네 번째 제품과 정가가 같은 제품을 한 개 더 반송했습니다.

here

이 쿼리를 선택하면 더 명확해집니다.

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

쉽게 이해할 수 있도록 Northwind DB의 간단한 예를 들어 설명하겠습니다.동일한 가격의 제품이 필요하다고 가정합니다.

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

with ties-1]

당신은 현재 가격이 10인 제품이 4개라는 것을 알고 있습니다. 하지만 당신은 여전히 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

제한된 결과 집합에서 마지막 순위와 같은 행을 두 개 이상 반환합니다.이 인수는 ORDER BY 절과 함께 사용해야 합니다.TIES를 사용하면 식에 지정된 값보다 더 많은 행이 반환될 수 있습니다.예를 들어, 식이 5로 설정되었지만 두 개의 추가 행이 5행의 ORDER BY 열 값과 일치하는 경우 결과 집합에는 7개의 행이 포함됩니다.

TOP 절은 SELECT 문에서만 WITH TIES 인수로 지정할 수 있으며 ORDER BY 절도 지정한 경우에만 지정할 수 있습니다.레코드를 묶는 순서는 임의입니다.주문 기준은 이 규칙에 영향을 주지 않습니다.

WITH TIES 조항에 대한 제 이해로, 만약 당신이 [값을 복제]하고 싶다면, 이 열은 주문 기준에 명시되어 있습니다.

WITH TIES제한된 결과 집합의 마지막 행과 일치하는 값을 가진 행을 더 많이 반환할 수 있습니다.:WITH TIES식에서 지정한 것보다 더 많은 행이 반환될 수 있습니다.

반환할 행을 선택하는 것은 결정적이지 않습니다.
즉, 기본 데이터를 변경하지 않고 쿼리를 다시 실행하면 이론적으로 세 행의 다른 집합을 얻을 수 있습니다.
실제로 행 선택은 다음과 같은 물리적 조건에 따라 달라집니다.

  • 최적화 선택사항
  • 스토리지 엔진 선택 항목
  • 데이터 레이아웃
  • 기타...

실제로 쿼리를 여러 번 실행하면 물리적 조건이 변경되지 않는 한 동일한 결과가 계속 나올 가능성이 있습니다.그러나 관계형 모델에서 "물리적 데이터 독립성" 원칙을 이해하고 논리적 수준에서는 반복 가능한 결과를 보장하지 않는다는 점을 기억하는 것이 중요합니다.순서 지정 없이는 순서가 임의적이므로 비결정론적 행이 선택됩니다.

현재 결과는 다음과 같습니다.

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

테이블에 중복된 행이 있거나 일반적으로 EmpNumber가 고유하므로 과거 행이 있을 수 있습니다.

참조에서

자세한 내용은 어떻게 설명하겠습니다.TOP WITH TIES작동하다

중요 참고:그 조항WITH TIES만 할 수 .TOP그리고.ORDER BY두 절 모두 필요합니다.

간단한 예를 들어 이 절이 어떻게 작동하는지 알아보겠습니다.

그 중에 10의행 개 6의행이사열용다에가니정합에 되는 열에 같은 값을 있다고 .ORDER BY용할때사를 할 때TOP 5행, 5개의 행만 반환됩니다.하지만 내가 사용한다면,TOP 5 WITH TIES상위 5개 레코드의 마지막 레코드와 동일한 값을 가진 모든 행을 반환합니다. 즉, 총 레코드 수를 의미합니다.

개념이 명확하기를 바랍니다.

아주 간단한 예를 들어 이해해 보겠습니다.

--Created a simple Table
DECLARE @tblStudent TABLE (
ID INT,
FName VARCHAR(50),
Marks INT
)
--Inserted some records in the table
INSERT INTO @tblStudent VALUES
(1,'Name1',50),
(2,'Name2',10),
(3,'Name3',10),
(4,'Name4',10),
(5,'Name5',10),
(6,'Name6',10),
(7,'Name7',70),
(8,'Name8',35),
(9,'Name9',45),
(10,'Name10',10)

가 " 드를포다음쿼리함한"인 다음TOP 55개의 행이 있는 결과 집합을 가져올 것입니다.

SELECT TOP 5  * FROM @tblStudent ORDER BY Marks; 

Result with 5 rows, all having the same Marks

쿼리를 하고 키워드를 TOP 5 WITH TIES.

SELECT TOP 5 WITH TIES * FROM @tblStudent ORDER BY Marks; 

Result with 6 rows, all having the same Marks

이번에는 5개 행만 반환하는 대신 모든 행을 반환합니다.가 하면우사때용할가왜를 사용할 입니다.TOP WITH TIES값이 동일한 모든 행을 반환합니다.

이 예를 통해 TOP의 작동 방식과 사용 시 동작이 어떻게 변하는지를 명확히 알 수 있기를 바랍니다.TOP WITH TIES.

SQL Fiddle: https://dbfiddle.uk/w4QY6lm2

아래 데이터가 있는 myTable이라는 테이블이 있다고 가정합니다.

ID 이름 급여

1 긱스 10000

4 핀치 10000

2 RR 6000

3 다비드 16000

5 레슬리 7000

6 왓슨 10000

쿼리: myTable에서 SELECT *를 선택합니다.

급여 명세서별 주문

처음 3행만 가져오기;

출력: 급여별로 내림차순으로 처음 3행만 주문받았습니다.

ID 이름 급여

3 다비드 16000

1 긱스 10000

4 핀치 10000

참고: 위의 결과에서 급여에서 내림차순으로 주문한 첫 번째 3행을 받았는데, 동일한 급여의 한 행이 더 있습니다. 즉, 왓슨 및 급여 10000이라는 이름의 행이 있지만, 출력을 처음 3행으로 제한했기 때문에 나타나지 않았습니다.그러나 라이브 애플리케이션에서는 대부분의 시간을 동점 처리된 행도 표시해야 하기 때문에 최적은 아닙니다.

실제 사례 – 10명의 Racer가 실행 중이고, 1등, 2등, 3등 3개의 상만 있다고 가정합니다. 하지만 Racer 3과 4가 동시에 레이스를 마쳤다고 가정하면, 이 경우 3과 4 사이의 동점이 발생하며, 이 때문에 두 선수 모두 포지션 3을 보유하게 됩니다.

WITH TIES 옵션은 TOP() 술어에 중요합니다.마지막 위치에 여러 행이 ORDER BY 절에 사용된 열에서 동일한 값을 가질 경우 해당 행을 포함할 수 있습니다.

여기에 이미지 설명 입력

여기에 이미지 설명 입력

첫 번째 이미지에서 볼 수 있듯이 마지막 행의 값은 db에서 더 동일합니다.그런 다음 다음 그림에서 동점자는 "순서 기준"에서 선택한 열의 동일한 값으로 모든 행을 가져옵니다.

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

언급URL : https://stackoverflow.com/questions/20853725/what-is-the-use-of-with-ties-keyword-in-select-statement-in-sql-queries