문제

내 관계가 이렇다고 해보자

enter image description here

순위별로 정렬하고 싶었는데 A와 B가 먼저였네요.그래서 내 관계는 다음과 같습니다

enter image description here

처음에는 두 관계만 가지려고 했습니다. 두 관계를 순위별로 정렬한 다음 두 관계를 결합했지만 결국에는 뒤죽박죽이 되었습니다.케이스를 사용해 보았지만 어떻게 작동하는지 이해하지 못합니다.문자와 정수를 혼합하는 것에 대한 오류가 계속 발생했습니다.

편집하다:위의 첫 번째 관계는 다소 복잡한 수의 조회수를 거친 후에 얻게 되는 결과라는 점을 언급하는 것을 잊어버렸습니다.예를 들어, A와 B 클래스만 있는 두 개의 뷰를 만든 다음 순위별로 정렬했습니다.두 번째 보기는 순위별로 정렬된 C 클래스입니다.그런 다음 결합했지만 혼합되었습니다.

도움이 되었습니까?

해결책

당신은 단지 CASE 의 표현 ORDER BY, 행을 두 그룹으로 나누기 위해 클래스 'A' 또는 'B'를 가진 항목이 첫 번째 그룹에 배치됩니다(1) 및 두 번째의 다른 모든 것(2):

ORDER BY 
    CASE WHEN class IN ('A', 'B') THEN 1 ELSE 2 END,
    rank ;

다른 팁

나는 당신에게 많은 데이터베이스에서 사용할 수있는 CTE를 사용하는 방법의 한 가지 예를 제공 할 것입니다.

CTE 및 WITH

ctes 를 허용합니다. 일시적인, 싱글 쿼리 테이블과 같은 구조체와 같은 단일 쿼리 테이블을 형성하기 위해서는 하나의 쿼리에서 서로 다른 하나에 의존 할 수 있으므로 쿼리 세미 절차를 만들 수있는 편리하고 이해하기 쉬운 방법을 제공합니다.

귀하의 경우에, 나는 시도 할 것입니다

WITH AB_results AS(
  SELECT class, rank, 1 AS hidden_rank
  FROM my_relation
  WHERE class IN ('A','B')
),
Non_AB_results AS(
  SELECT class, rank, 2 AS hidden_rank
  FROM my_relation
  WHERE class NOT IN ('A','B')
)
SELECT COALESCE(AB_results.class,Non_AB_results.class), rank
FROM AB_results
FULL OUTER JOIN Non_AB_results
USING(hidden_rank,rank)
ORDER BY hidden_rank, rank;
.

여기에 몇 분 안에 SQLFIDDLE를 함께 사용하려고 노력해보십시오. 내 쿼리를 잘못 취소하지 않았는지 확인하십시오. : p

편집 : 나는 작은 오류를 만들었습니다. 우리가 말하는 것에 따라 청소하려고합니다.

편집 2 : 이제 오류가 수정되었습니다! 불행히도, SQLFIDDLE는 지금 약간의 문제가 있지만 여기 일부 테스트를 위해 SQLFiddle에 대한 링크.

가장 우아한 방법으로 이것을 해결하지 못했지만 문제를 해결할 수 없도록주의하십시오.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 dba.stackexchange
scroll top