programing

SQL은 특정 레코드가 맨 위에 하나 있고, 다른 레코드는 아래에 모두 있습니다.

closeapi 2023. 9. 13. 22:37
반응형

SQL은 특정 레코드가 맨 위에 하나 있고, 다른 레코드는 아래에 모두 있습니다.

특정 레코드 하나(레코드의 프라이머리 ID에 의해 발견됨)를 상단에 표시하고, 그 아래에 날짜별로 정렬된 다른 모든 레코드를 표시하는 쿼리를 조합하려고 합니다(프라이머리 ID 외에 테이블의 필드 중 하나로 "date_added"가 있습니다).

UNION으로 이 작업을 수행할 수 있습니다(첫 번째 선택은 원하는 레코드를 찾고 다른 선택은 다른 모든 레코드를 표시함). 하지만 더 나은 방법이 없을까요?

그건 그렇고, 오라클을 사용하고 있습니다.

두 필드로 정렬하여 이 작업을 수행할 수 있습니다.

첫 번째는 행이 원하는 행이면 0을 반환하고 그렇지 않으면 1을 반환하는 식입니다.정렬은 오름차순으로 진행되므로 선호하는 레코드를 먼저 얻습니다.

두 번째 정렬 필드는 date_added이므로 나머지 레코드는 이 순서로 정렬됩니다.

sql server에 있는 오라클을 모를까봐 걱정됩니다.

select * 
from the_table 
order by (case id when 999 then 0 else 1 end), date_added desc 

더 쉬운 방법은 화려한 주문을 시공하는 것입니다.pk = 123의 예는 다음과 같습니다.

select *
from YourTable
order by case when yourpk = 123 then 1 else 2 end, date_added

오라클을 정확히 알지는 못하지만, 당신은 아마...

ORDER BY IF(id == THE_ID, 0, 1), date_added

두 개 이상의 레코드를 같은 기술을 사용하여 맨 위로 정렬할 수 있습니다.

999 처음에 998초, 그 다음에 날짜별로 정렬된 다른 모든 것들

*를 선택

from the_table 
order by (case id when 999 then 0 when 998 then 1 else 2 end), date_added desc
SELECT *
FROM `Table`
ORDER BY (`id` = THE_ID) DESC, `date_added` DESC

간단한 방법은 두 개의 개별 항목을 표시하고, 따라서 간단한 쿼리를 구분하기 위해 쓰기를 원한다는 것을 인식하는 것입니다.첫 번째 레코드를 검색하는 쿼리와 정렬된 목록을 검색하는 쿼리가 있습니다.하나의 고유한 기록 때문에 이 이상의 작업을 수행하는 데 실질적인 성능상의 이점은 없습니다.

언급URL : https://stackoverflow.com/questions/1699955/sql-to-have-one-specific-record-at-the-top-all-others-below

반응형