수색…


컨텍스트

SELECT 의 절에는 특정 순서가 있습니다.

SELECT ... FROM ... WHERE ... GROUP BY ... HAVING ...
    ORDER BY ...  -- goes here
    LIMIT ... OFFSET ...;

( SELECT ... ) UNION ( SELECT ... ) ORDER BY ...  -- for ordering the result of the UNION.

SELECT ... GROUP_CONCAT(DISTINCT x ORDER BY ... SEPARATOR ...) ...

ALTER TABLE ... ORDER BY ... -- probably useful only for MyISAM; not for InnoDB

기본

ORDER BY x

x 는 모든 데이터 유형이 될 수 있습니다.

  • NULLsNULLs 아닌 값 앞에옵니다.
  • 기본값은 ASC (가장 낮은 ASC 가장 높은 것)
  • 문자열 ( VARCHAR 등)은 선언의 COLLATION 에 따라 정렬됩니다.
  • ENUMs 은 문자열의 선언 순서에 따라 정렬됩니다.

상승 하강

ORDER BY x ASC  -- same as default
ORDER BY x DESC  -- highest to lowest
ORDER BY lastname, firstname  -- typical name sorting; using two columns
ORDER BY submit_date DESC  -- latest first
ORDER BY submit_date DESC, id ASC  -- latest first, but fully specifying order.
  • ASC = ASCENDING , DESC = DESCENDING
  • DESC 경우에도 NULLs 이 먼저옵니다.
  • 위의 예에서 INDEX(x) , INDEX(lastname, firstname) , INDEX(submit_date) 는 성능을 크게 향상시킬 수 있습니다.

그러나 ... 마지막 예제에서와 같이 ASCDESC 혼합하면 복합 색인을 사용하여 이익을 얻을 수 없습니다. INDEX(submit_date DESC, id ASC) 도움말도 - " DESC "는 INDEX 선언에서 구문 적으로 인식되지만 무시됩니다.

몇 가지 트릭

ORDER BY FIND_IN_SET(card_type, "MASTER-CARD,VISA,DISCOVER") -- sort 'MASTER-CARD' first.
ORDER BY x IS NULL, x  -- order by `x`, but put `NULLs` last.

주문 주문

SELECT * FROM some_table WHERE id IN (118, 17, 113, 23, 72) 
ORDER BY FIELD(id, 118, 17, 113, 23, 72);

지정된 순서로 ID를 돌려줍니다.

신분증 ...
118 ...
17 ...
113 ...
23 ...
72 ...

ID가 이미 소트되어있어, 행을 취득 할 필요가있는 경우에 도움이됩니다.



Modified text is an extract of the original Stack Overflow Documentation
아래 라이선스 CC BY-SA 3.0
와 제휴하지 않음 Stack Overflow