[SQL] 특정 순서로 여러 값 BY SQL ORDER?
SQL특정 순서로 여러 값 BY SQL ORDER?
좋아 나는 인덱스 키와 비 인덱스 필드가있는 테이블이있다. 나는 특정 값으로 모든 레코드를 찾을 필요하고 행을 반환합니다. 나는 여러 값으로 주문할 수 있는지 알고 싶습니다.
예:
id x_field
-- -----
123 a
124 a
125 a
126 b
127 f
128 b
129 a
130 x
131 x
132 b
133 p
134 p
135 i
의사 : 결과를 원하는가 다음과 같이 주문해야 여기서 ORDER BY x_field = 'F', 'P', 'I', 'A'
SELECT *
FROM table
WHERE id NOT IN (126)
ORDER BY x_field 'f', 'p', 'i', 'a'
그래서에게 그 결과는 다음과 같습니다
id x_field
-- -----
127 f
133 p
134 p
135 i
123 a
124 a
125 a
129 a
구문은 유효하지만 쿼리를 실행할 때 내가 한 기록으로 제한하는 경우에도, 어떤 결과를 반환하지 않습니다. 이것에 대해 갈 수있는 또 다른 방법이 있습니까?
테스트 결과로 x_field 생각 나는 상태에 빠지게 모든 레코드를 확인해야합니다. 나는 실패 값을 기준으로 테스트 결과를 주문하고 싶었다 값을 통과시켰다. 내가 먼저 다음 BY 순서를 사용하여 전달 된 값을 실패한 값을 확인할 수 있도록.
내가 할 수없는 무엇 :
이 질문을 작성 후 나는 LOL이을 재고 할 필요가 있다고 생각하기 시작 해요!
해결법
-
==============================
1.
... WHERE x_field IN ('f', 'p', 'i', 'a') ... ORDER BY CASE x_field WHEN 'f' THEN 1 WHEN 'p' THEN 2 WHEN 'i' THEN 3 WHEN 'a' THEN 4 ELSE 5 --needed only is no IN clause above. eg when = 'b' END, id
-
==============================
2.넌 "VALUES ( 'F', 1, 'P', 2), ( 'A', 3), ( 'I'는, 4)"를이 순서로 두 번째 열을 이용하여 조인 LEFT를 사용 에 의하여 - 식입니다. 해시를 사용합니다 포스트 그레스는 값의 많은 경우 훨씬 더 빨리 큰 CASE보다 것이다 가입. 그리고 그것은 자동 생성에 용이하다.
넌 "VALUES ( 'F', 1, 'P', 2), ( 'A', 3), ( 'I'는, 4)"를이 순서로 두 번째 열을 이용하여 조인 LEFT를 사용 에 의하여 - 식입니다. 해시를 사용합니다 포스트 그레스는 값의 많은 경우 훨씬 더 빨리 큰 CASE보다 것이다 가입. 그리고 그것은 자동 생성에 용이하다.
이 주문 정보가 고정되어있는 경우, 그것은 자신의 테이블이 있어야합니다.
-
==============================
3.시험:
시험:
ORDER BY x_field='F', x_field='P', x_field='A', x_field='I'
당신이 바로 그 궤도에 있었다,하지만 F 값에 x_field을 넣어, 다른 셋은 데이터 세트에서 아무것도 비교 상수로 취급되지 않았다.
-
==============================
4.정렬 할 수있는 숫자로 코드를 변환하는 경우 스위치를 사용 :
정렬 할 수있는 숫자로 코드를 변환하는 경우 스위치를 사용 :
ORDER BY case x_field when 'f' then 1 when 'p' then 2 when 'i' then 3 when 'a' then 4 else 5 end
-
==============================
5.나는 이것에 대한 많은 청소기 솔루션을 발견 :
나는 이것에 대한 많은 청소기 솔루션을 발견 :
ORDER BY array_position(ARRAY['f', 'p', 'i', 'a']::varchar[], x_field)
참고 : array_position은 포스트 그레스 V9.5 이상이 필요합니다.
-
==============================
6.제안 BY 케이스와 ORDER은,하지만 난 다른 색의 말을 제안 모든 작업려고한다. 이 x_field 값의 합당한 수 있습니다 당신은 이미 그들이 무엇인지 알고 있다고 가정하면, (다른 가능한 값이 적용됩니다 어떤 플러스) 값으로 F, P, A, 내가 가진 열거 형을 만들 수 있습니다. 열거 형은 CREATE 문에 의해 묵시적 순서로 정렬합니다. 또한, 당신은 아마 meaninful 값 이름 - 실제 응용 프로그램을 사용하지 만 서수 위치가 저장되어 있기 때문에 당신은 단지, 비밀-없이 낭비되는 공간을 마스크 할 수 있습니다.
제안 BY 케이스와 ORDER은,하지만 난 다른 색의 말을 제안 모든 작업려고한다. 이 x_field 값의 합당한 수 있습니다 당신은 이미 그들이 무엇인지 알고 있다고 가정하면, (다른 가능한 값이 적용됩니다 어떤 플러스) 값으로 F, P, A, 내가 가진 열거 형을 만들 수 있습니다. 열거 형은 CREATE 문에 의해 묵시적 순서로 정렬합니다. 또한, 당신은 아마 meaninful 값 이름 - 실제 응용 프로그램을 사용하지 만 서수 위치가 저장되어 있기 때문에 당신은 단지, 비밀-없이 낭비되는 공간을 마스크 할 수 있습니다.
-
==============================
7.당신은 선택한 열 또는 다른 식으로 주문할 수 있습니다.
당신은 선택한 열 또는 다른 식으로 주문할 수 있습니다.
여기에 예를 들어, 어떻게 대소 문의 결과에 의해 주문하기 :
SELECT col1 , col2 FROM tbl_Bill WHERE col1 = 0 ORDER BY -- order by case-statement CASE WHEN tbl_Bill.IsGen = 0 THEN 0 WHEN tbl_Bill.IsGen = 1 THEN 1 ELSE 2 END
그 결과 "IsGen = 1"행 및 다른 열의 상기 일단 뒤에 "IsGen = 0"행에서 시작하는 것이다.
당신은 마지막에 더 주문 매개 변수를 추가 할 수 있습니다 :
SELECT col1 , col2 FROM tbl_Bill WHERE col1 = 0 ORDER BY -- order by case-statement CASE WHEN tbl_Bill.IsGen = 0 THEN 0 WHEN tbl_Bill.IsGen = 1 THEN 1 ELSE 2 END, col1, col2
-
==============================
8.당신은 순서를 주문하는 순서대로 위치 (텍스트의 텍스트)를 사용할 수 있습니다
당신은 순서를 주문하는 순서대로 위치 (텍스트의 텍스트)를 사용할 수 있습니다
from https://stackoverflow.com/questions/6332043/sql-order-by-multiple-values-in-specific-order by cc-by-sa and MIT license
'SQL' 카테고리의 다른 글
[SQL] 행이 최대 날짜가 테이블에서 선택 정보 (0) | 2020.04.01 |
---|---|
[SQL] 연속 행 사이의 날짜 차이 (0) | 2020.04.01 |
[SQL] 어떻게 제대로 오라클 ORDER BY와 ROWNUM을 사용 하는가? (0) | 2020.04.01 |
[SQL] 어떻게 SQL의 조합에 의해 주문하는? (0) | 2020.04.01 |
[SQL] Grails의 SQL 문을 기록하는 방법 (0) | 2020.04.01 |