IT

MySQL Orderby 숫자, Nulls 마지막

lottoking 2020. 4. 1. 08:14
반응형

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

이 쿼리를 사용해보십시오.

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 의 다른 숫자보다 크게 만드십시오 .)


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` = 0 THEN 'a' END , position ASC

A의 DATE열 당신은 사용할 수 있습니다 :


마지막 NULL :

ORDER BY IFNULL(`myDate`, '9999-12-31') ASC

마지막 공백 :

ORDER BY IF(`myDate` = '', '9999-12-31', `myDate`) ASC

다음과 같은 결과를 얻으려면 :

1, 2, 3, 4, NULL, NULL, NULL.

USE 구문, -(minus sign)필드 이름 앞에 배치 하고 역 order_type을 사용하십시오 (처럼 : ASC 순서로 주문하려면 DESC를 사용하거나 DESC 순서를 원하면 ASC를 사용하십시오)

SELECT * FROM tablename WHERE visible=1 ORDER BY -position DESC


NULLS LAST로 주문하지 않는 이유는 무엇입니까?

SELECT * 
FROM tablename
WHERE visible = 1 
ORDER BY position ASC NULLS LAST, id DESC 

참고 URL : https://stackoverflow.com/questions/2051602/mysql-orderby-a-number-nulls-last

반응형