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가 사용되었기 때문에 네 번째 제품과 정가가 같은 제품을 한 개 더 반송했습니다.
이 쿼리를 선택하면 더 명확해집니다.
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
]
당신은 현재 가격이 10인 제품이 4개라는 것을 알고 있습니다. 하지만 당신은 여전히 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://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 5
5개의 행이 있는 결과 집합을 가져올 것입니다.
SELECT TOP 5 * FROM @tblStudent ORDER BY Marks;
쿼리를 하고 키워드를 TOP 5 WITH TIES
.
SELECT TOP 5 WITH TIES * FROM @tblStudent ORDER BY 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
'programing' 카테고리의 다른 글
C#이 있는 MongoDB에서 지정된 필드만 가져옵니다. (0) | 2023.06.28 |
---|---|
사용되지 않는 타이핑 패키지를 수동으로 업데이트하는 방법 (0) | 2023.06.28 |
Mongo 클라이언트가 밑줄이 앞에 붙은 컬렉션에 액세스할 수 없음 (0) | 2023.06.28 |
각 지점 및 해당 지점의 마지막 개정 날짜를 Git로 나열 (0) | 2023.06.28 |
'{}' 유형을 '{title: string; }' 유형에 할당할 수 없습니다. (0) | 2023.06.28 |