[mysql] MySQL Orderby 숫자, Nulls 마지막

현재 저는 진술서에서 매우 기본적인 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 DESCNULL 값을 마지막 에 배치하는 것과 반대 이지만 그렇지 않으면와 동일합니다 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). (두 번째 숫자를 positiondb 의 다른 숫자보다 크게 만드십시오 .)