[SQL] 특별한 제외하고, 다른 모든 후에는 null 값을 정렬
SQL특별한 제외하고, 다른 모든 후에는 null 값을 정렬
나는 옵션 주문 필드 항목의 PostgreSQL의 테이블이 있습니다 :
CREATE TABLE tasks (
id integer PRIMARY KEY DEFAULT nextval('f_seq'),
f_id integer REFERENCES fixins,
name text NOT NULL,
sort integer
);
나는 한 가지 예외 다른 모든 후 종류에 어떤 종류의 값을이없는 작업을합니다 : 만약 종류 = -1 내가 그 이후에 정렬합니다. 따라서, 예를 들어,이 값을 제공 :
id | f_id | name | sort
---+------+----------+-------
1 | 1 | zeta | -1
2 | 1 | alpha | 1
3 | 1 | gamma | 3
4 | 1 | beta | 2
5 | 1 | delta |
6 | 1 | epsilon |
알파, 베타, 감마, 델타, 엡실론, 제타 : 나는 그들과 같이 정렬합니다.
내가 아닌 널 (null) 이후 주문 널 (null) 값으로 ORDER BY COALESCE을 (종류, 99999)를 사용할 수 있다는 것을 알고 있지만, 어떻게 그 후에 와서 특별한 -1 값을받을 수 있나요?
해결법
-
==============================
1.간단한 :
간단한 :
SELECT * FROM tasks ORDER BY (sort IS NOT DISTINCT FROM -1), sort;
포스트 그레스 (다른 RDBMS는 달리) 적절한 부울 유형이 있습니다. 당신은 다른 데이터 유형으로처럼으로 주문할 수 있습니다. 그리고 그것은 다른 데이터 유형과 같은 NULL이 될 수 있습니다. 기본 정렬 순서는 다음과 같습니다
FALSE (0) TRUE (1) NULL
TRUE 평가하고 마지막 정렬 - 평가하여 -1 제외한 모든 값을 FALSE로 (-1 DISTINCT 정렬되지 않음). 그냥 항목에 의해 보조 순서와 종류 추가합니다.
이에 상응하는 대안 :
SELECT * FROM tasks ORDER BY (sort IS DISTINCT FROM -1) DESC, sort;
SQL 바이올린.
-
==============================
2.
SELECT name FROM tasks WHERE f_id=1 ORDER BY CASE COALESCE(sort,88888) WHEN -1 THEN 99999 ELSE COALESCE(sort,88888) END, id;
그런데도를 선택하지 않고, 한 번만 않는 유착에 더 우아한 방법을 찾고.
from https://stackoverflow.com/questions/21891803/sorting-null-values-after-all-others-except-special by cc-by-sa and MIT license
'SQL' 카테고리의 다른 글
[SQL] 오라클 업데이트 쿼리에 참여하여 (0) | 2020.05.06 |
---|---|
[SQL] 와 업데이트는 오라클에서 쿼리 가입 (0) | 2020.05.06 |
[SQL] 1 열은 쉼표 갖는 경우 조인 테이블 SQL (0) | 2020.05.06 |
[SQL] pg_views 쿼리에서 불완전한 정보 [중복] (0) | 2020.05.06 |
[SQL] DB2에 회전식 (0) | 2020.05.06 |