mysql SQL : 특정 항목을 먼저 표시하고 나머지 항목을 정렬합니다.
아래 표가 있다고 가정 해 봅시다.
모든 친구를 얻고 싶지만 ID 5가 목록의 첫 번째 항목이되기를 원합니다. 나머지 품목을받는 순서는 신경 쓰지 않습니다.
원하는 쿼리 결과는 다음과 같습니다.
friends
-------
id name
5 nahum
1 moshe
2 haim
3 yusuf
4 gedalia
6 dana
어떻게 할 수 있습니까?
Mysql 5.1.x 사용.
감사!
select id,name
from friends
order by id=5 desc
(나머지 순서에 신경 쓰지 않는다는 점을 감안할 때, 그렇지 않으면 예를 들어 rest by id asc )
select id,name
from friends
order by id=5 desc, id asc
이 시도:
select id,name
from friends
order by case when id=5 then -1 else id end
하나 이상 있으면 다음을 수행 할 수 있습니다.
select id,name
from friends
order by case when id in (5,15,25) then -1 else id end,id
지금은 MySQL에 액세스하여 테스트 할 수 없으므로 역전 될 수 있습니다.하지만 Booleans도 정렬하고 여러 정렬 필드를 가질 수 있다는 사실을 사용할 수 있습니다.
SELECT ... ORDER BY id != 5, id
(당신은 작성해야 할 수도 있습니다. id = 5
TRUE가 FALSE 전후에 정렬되는지 기억할 수 없습니다.)
편집 : 오, 나는 당신이 나머지 순서에 신경 쓰지 않는다는 것을 읽었습니다.이 경우 @Richard의 대답을 진심으로 추천합니다.
예를 들어 다음과 같은 경우 UNION 쿼리에 대해 동일한 작업을 수행하려는 경우 :
select id,name
from friends
UNION
select id,name
from friends
order by id=5 desc
... PostgreSQL에서 예외가 발생합니다.
결과 열 이름 만 사용할 수 있으며 표현식이나 함수는 사용할 수 없습니다. 힌트 : 모든 SELECT에 식 / 함수를 추가하거나 UNION을 from 절로 이동
이 문제를 해결하려면 다음을 사용합니다.
select id,name, (id=5) AS is_five
from friends
UNION
select id,name, (id=5) AS is_five
from friends
order by is_five DESC, id DESC
표현식 (id = 5)은 열 값이 예상 값 (5)과 같은지 여부에 따라 't'OR 'f'를 반환하므로 정렬 기준은 먼저 't'열을 정렬 한 다음 쉬다.
이 문제를 해결하려면 MySQL의 ORDER BY FIELD 절을 사용해야합니다. 이에 대한 대답은 받아 들여졌지만 여기에 더 나은 해결책이 있습니다.
select 1 id, 'Zeta' order_col union all
select 2 id, 'Alpha' order_col union all
select 3 id, 'Gamma' order_col union all
select 4 id, 'Phi' order_col union all
select 5 id, 'Delta' order_col union all
select 6 id, 'Delta' order_col union all
select 7 id, 'Alpha' order_col union all
select 8 id, 'Gamma' order_col union all
select 9 id, 'Zeta' order_col union all
select 10 id, 'Phi' order_col
order by field (order_col, 'Alpha', 'Gamma', 'Phi', 'Delta', 'Zeta'), id;
이것은보다 낫다
- id = something, id asc로 주문
- order by case when something then 1 when something_else then 2 end desc
You can use field()
in MySQL.
select id,name from friends order by field(id,5,id)
The 1st parameter in field() means the field you want to sort with, the rest is ordering.
So 5 will be sort first, and the rest from id (without 5). You can do like field(id,5,1,3,id)
if you want 5,1,3 to be in front.
5 can be choose to sort at last by field(id,id,5)
. The 2nd id will exclude 5 from it also.
This is a little ugly because it has code duplication, but it does the trick:
select .... where id = 5
union
select .... where not id = 5
'Program Tip' 카테고리의 다른 글
물음표와 함께 작은 검은 색 다이아몬드를 보여주는 PHP 출력 (0) | 2020.10.31 |
---|---|
퍼블릭 데이터 멤버 vs 게터, 세터 (0) | 2020.10.31 |
Objective-C에서 nil, NIL 및 null의 차이점 (0) | 2020.10.31 |
바이너리를 ASCII로 또는 그 반대로 변환 (0) | 2020.10.31 |
"나침반 시계"에서 sass / script / node를로드 할 수 없다고 말하는 이유는 무엇입니까 (LoadError)? (0) | 2020.10.31 |