일부 테스트를 완료하면 결과가 이상합니다. 에 의해 순서는 노조의 끝에서해야하기 때문에, 의미가
select top 2 * from @users where gender = 0 order by id
union all
select top 2 * from @users where gender = 1 order by id
: 당신이 노동 조합의 두 부분에 order by
을 지정하는 경우, SQL Server는 구문 오류가 있습니다. 그러나 하위 쿼리에서 동일한 구문을 사용하면 컴파일됩니다! 당신이 하위 쿼리 조합에 대해 하나의 order by
을 지정할 때
이
select * from (
select top 2 * from @users where gender = 0 order by id
union all
select top 2 * from @users where gender = 1 order by id
) sub
이상한 일이 발생합니다 : 그리고 예상대로 작동
select * from (
select top 2 * from @users where gender = 0
union all
select top 2 * from @users where gender = 1 order by id
) sub
가 지금은 무작위로 노조의 전반을 주문하지만, 하반기 이드. 그것은 꽤 예기치 않습니다. 같은 일이 상반기에 order by
으로 발생합니다
select * from (
select top 2 * from @users where gender = 0 order by id desc
union all
select top 2 * from @users where gender = 1
) sub
나는이 구문 오류를주고 기대하지만, 대신 노조의 전반을 주문한다. 따라서 union
이 서브 쿼리의 일부일 때 다른 방법으로 order by
과 상호 작용하는 것처럼 보입니다.
select *
from (
select *
from (
select top 2 *
from @users
where gender = 0
order by
id desc
) males
union all
select *
from (
select top 2 *
from @users
where gender = 1
order by
id desc
) females
) males_and_females
order by
id
예 데이터 :
declare @users table (id int identity, name varchar(50), gender bit)
insert into @users (name, gender)
select 'Joe', 0
union all select 'Alex', 0
union all select 'Fred', 0
union all select 'Catherine', 1
union all select 'Diana', 1
union all select 'Esther', 1
크리스 다이버처럼
는 원래 명시 적으로 모든 노동 조합에
order by
에 의존하고, 지정하지 않는 것입니다, 혼란에서 얻을 수있는 좋은 방법을 게시
당신이 당신의 쿼리의 SQL을 게시 할 수 일을하는 또 다른 방법? 특히 괄호와 위치 또는 'order by'절과 같은 것에 대해 궁금합니다. – sje397
@ sje397, 나중에 완료 – eugeneK
어떤 기준으로 상위 1000 개를 고르려고하십니까? 현재 조합 위에있는 쿼리는 무작위로 효과적으로 선택됩니다. –