반응형
MySQL-IN () 내의 ORDER BY 값
IN () 함수에 입력 된 순서 에 따라 다음 쿼리에서 반환 된 항목을 정렬하고 싶습니다 .
입력:
SELECT id, name FROM mytable WHERE name IN ('B', 'A', 'D', 'E', 'C');
산출:
| id | name |
^--------^---------^
| 5 | B |
| 6 | B |
| 1 | D |
| 15 | E |
| 17 | E |
| 9 | C |
| 18 | C |
어떤 아이디어?
SELECT id, name
FROM mytable
WHERE name IN ('B', 'A', 'D', 'E', 'C')
ORDER BY FIELD(name, 'B', 'A', 'D', 'E', 'C')
FIELD의 함수 스트링의 나머지 목록의 첫 번째 문자열의 위치를 반환한다.
그러나 정렬 순서를 나타내는 인덱싱 된 열을 보유한 다음이 열을 기준으로 정렬하는 것이 성능면에서 훨씬 좋습니다.
여기에서 또 다른 옵션 : http://dev.mysql.com/doc/refman/5.0/en/sorting-rows.html
select *
from tablename
order by priority='High' DESC, priority='Medium' DESC, priority='Low" DESC;
따라서 귀하의 경우 (예상되지 않은)는
SELECT id, name
FROM mytable
WHERE name IN ('B', 'A', 'D', 'E', 'C')
ORDER BY name = 'B', name = 'A', name = 'D', name = 'E', name = 'C';
당신이 무엇을하는지에 따라 나는 그것이 약간 기발하다는 것을 알았지 만 항상 조금 가지고 놀면 작동합니다.
다음과 같은 시도
... ORDER BY (CASE NAME WHEN 'B' THEN 0 WHEN 'A' THEN 1 WHEN ...
누군가에게 도움이 될 수 있습니다 (p_CustomerId가 SP에 전달됨).
SELECT CompanyAccountId, CompanyName
FROM account
LEFT JOIN customer where CompanyAccountId = customer.AccountId
GROUP BY CompanyAccountId
ORDER BY CASE WHEN CompanyAccountId IN (SELECT AccountId
FROM customer
WHERE customerid= p_CustomerId)
THEN 0
ELSE 1
END, CompanyName;
설명 : 계정 목록을 표시하고 싶습니다. 여기 sp에서 고객 ID를 전달하고 있습니다. 이제 해당 고객과 연결된 계정이있는 계정 이름이 맨 위에 표시되고 다른 계정이 알파벳순으로 표시됩니다.
정렬 순서를 지정하는 테이블에 다른 열 (숫자)이 필요합니다. IN 절은 이런 식으로 작동하지 않습니다.
B - 1
A - 2
D - 3
E - 4
C - 5
그냥 사용
order by INSTR( ',B,C,D,A,' , concat(',' , `field`, ',' ) )
같은 상황을 피하십시오
INSTR('1,2,3,11' ,`field`)
순서가 지정되지 않은 결과 행으로 끝납니다 : 1 및 11 교대
참고 URL : https://stackoverflow.com/questions/958627/mysql-order-by-values-within-in
반응형
'developer tip' 카테고리의 다른 글
jQuery 팝업 버블 / 툴팁 (0) | 2020.08.20 |
---|---|
DOM에 HTML 문자열 추가 (0) | 2020.08.20 |
위치 0에 C # 데이터 테이블 삽입 열 (0) | 2020.08.20 |
객체 속성에 직접 할당 된 클로저 호출 (0) | 2020.08.20 |
Python의 "is"연산자 이해 (0) | 2020.08.20 |