2014-06-09 5 views
2

나는 Mac에서 mysql을 연구하기 위해 "bank"라는 테스트 데이터를 사용하고있다. 나는 mysql에서 알파벳 정렬에 관한 질문을 가지고있다.alphabet sort in mysql

나는 "I"는 "B"이며 전에, 반환 열 2에 도시 한 예시적인 코드를 select cust_id,cust_type_cd,city,state,fed_id from customer order by 2 asc;

있다.

누구나 이유가 무엇인지 압니까? 많은 감사합니다. 당신은 당신이 쿼리 아래

select cust_id,cust_type_cd,city,state,fed_id from customer order by cust_id asc; 
+1

'주문순'입니다. 'order by 2' 오름차순/내림차순은 중요하지 않습니다. b/c 2는 항상 그 자체와 동일하므로 기본값은 행이 기본 파일. –

+1

@JeremyMiller, "출력용으로 선택된 열은 열 이름, 열 별칭 또는 열 위치를 사용하여 ORDER BY 및 GROUP BY 절에서 참조 할 수 있습니다. 열 위치는 정수이고 1로 시작합니다. http://dev.mysql.com/doc/refman/5.6/en/select.html –

+0

@BillKarwin Super sweet. 나는 전에 알지 못했던 것을 배우는 것을 좋아합니다. 감사. –

답변

4

cust_type_cdENUM이고 "I"는 열거 형 정의에서 "B"앞에 정렬되어 있습니다.

열거 형은 알파벳 값이 아니라 열거 형으로 정의 된 목록에서 값의 서수 위치별로 정렬합니다.

... ORDER BY CONCAT(cust_type_cd) ASC 

참조 기능을 사용하는 것이 http://dev.mysql.com/doc/refman/5.6/en/enum.html#enum-sorting

참고 :

순으로 정렬 중 하나를 알파벳 순서로 항목이 열거를 정의하거나 다른 값을 강제하려면 문자열 값으로 변환 할 ORDER BY 절에서와 같이 정렬을 위해 인덱스를 사용할 기회를 망칠 수 있습니다. filesort를 사용해야합니다.

+0

감사합니다. 귀하의 의견은 나에게 의미가 있습니다.그러나 다른 사람이 문자열을 다듬을 것을 제안하고 작동합니다. 이 두 가지 방법 모두 작동합니다. 하지만 그들은 다른 것처럼 보입니다. 그렇죠? – Kenny

+0

예, 모두 작동합니다. 왜냐하면 문자열 함수 내에서 cust_type_cd 열을 사용하면 MySQL이 서수 위치가 아닌 열거 형의 문자열 값으로 대체되기 때문입니다. 둘 다 색인 사용을 망칠뿐입니다. –

0

당신은 가정 테이블 의 열 이름으로 순서를 제공해야합니다. 나는 문자 앞에 약간의 공간이있는 것 같다. 열 번호가 순서를 사용하여 2 오름차순

1

사용을 사용해야 CUST_ID에 따라 정렬 할 경우

+0

의견을 보내 주셔서 감사합니다. – Kenny

+0

stackoverflow 사용자가 항상 당신을 위해 일한 경우 답변을 받아 감사 대신 투표하려고합니다. 이것은 다른 사람의 시간을 절약하기위한 것입니다. 해피 코딩 .. – Krishna

+0

알아. 한 번만 더 질문합니다. 이유는 위의 Bill이 제안한대로 음수 데이터 형식이거나 문자열 앞에 빈 공간이 있는지 확실하지 않습니다. 둘 다 작동합니다. – Kenny

1

하여 고객 주문에서

선택 CUST_ID, 트림 (cust_type_cd) cust_type_cd, 도시, 주, fed_id 엄격하게하지 않는 것이 좋습니다. 특히 SELECT *을 사용하지 않은 경우에는 사용되지 않습니다. 또한 누군가가 테이블을 변경하고 일부 열을 추가/제거 할 때 문제가 발생합니다. 이 링크를 클릭 하시어 도움이 될 수도 있습니다. http://blog.sqlauthority.com/2010/12/27/sql-server-order-by-columnname-vs-order-by-columnnumber/