현재 저는 진술서에서 매우 기본적인 OrderBy를하고 있습니다.
SELECT * FROM tablename WHERE visible=1 ORDER BY position ASC, id DESC
이것의 문제점은 ‘position’에 대한 NULL 항목이 0으로 취급된다는 것입니다. 따라서 position이 NULL 인 모든 항목은 1,2,3,4가있는 항목 앞에 나타납니다. 예 :
NULL, NULL, NULL, 1, 2, 3, 4
다음 순서를 달성 할 수있는 방법이 있습니까?
1, 2, 3, 4, NULL, NULL, NULL.
답변
MySQL에는 문서화되지 않은 구문이있어 널을 마지막으로 정렬합니다. 열 이름 앞에 빼기 부호 (-)를 놓고 ASC를 DESC로 전환하십시오.
SELECT * FROM tablename WHERE visible=1 ORDER BY -position DESC, id DESC
본질적으로 position DESC
NULL 값을 마지막 에 배치하는 것과 반대 이지만 그렇지 않으면와 동일합니다 position ASC
.
좋은 참조는 여기 http://troels.arvin.dk/db/rdbms#select-order_by
답변
나는 이것이 대부분 좋은 해결책이라는 것을 알았다.
SELECT * FROM table ORDER BY ISNULL(field), field ASC;
답변
같은 것
SELECT * FROM tablename where visible=1 ORDER BY COALESCE(position, 999999999) ASC, id DESC
999999999를 필드의 최대 값으로 바꾸십시오.
답변
마지막 NULL
SELECT * FROM table_name ORDER BY id IS NULL, id ASC
답변
NULL 인스턴스를 다른 값으로 바꿔서 먼저 (0 또는 -1과 같이) 또는 마지막으로 (큰 숫자 나 문자) 정렬 할 수 있습니다.
SELECT field1, IF(field2 IS NULL, 9999, field2) as ordered_field2
FROM tablename
WHERE visible = 1
ORDER BY ordered_field2 ASC, id DESC
답변
이 쿼리를 사용해보십시오.
SELECT * FROM tablename
WHERE visible=1
ORDER BY
CASE WHEN position IS NULL THEN 1 ELSE 0 END ASC,id DESC
답변
명령문 에서 NULL을 통합 할 수 있습니다 ORDER BY
.
select * from tablename
where <conditions>
order by
coalesce(position, 0) ASC,
id DESC
NULL을 맨 아래에서 정렬하려면을 시도하십시오 coalesce(position, 100000)
. (두 번째 숫자를 position
db 의 다른 숫자보다 크게 만드십시오 .)