특정 필드 값을 기준으로 먼저 정렬
3 개의 열이있는 테이블이 있습니다.
id | name | priority
--------------------
1 | core | 10
2 | core | 9
3 | other | 8
4 | board | 7
5 | board | 6
6 | core | 4
우선 순위가 낮더라도 우선 순위 priority
를 갖는 행을 사용하여 결과 집합을 정렬하고 싶습니다 name=core
. 결과는 다음과 같아야합니다.
id | name | priority
--------------------
6 | core | 4
2 | core | 9
1 | core | 10
5 | board | 6
4 | board | 7
3 | other | 8
도있다 MySQL의 FIELD
기능 .
가능한 모든 값에 대해 완전한 정렬을 원하는 경우 :
SELECT id, name, priority
FROM mytable
ORDER BY FIELD(name, "core", "board", "other")
"핵심"이 첫 번째이고 다른 값은 중요하지 않다는 점만 신경 쓰는 경우 :
SELECT id, name, priority
FROM mytable
ORDER BY FIELD(name, "core") DESC
먼저 "코어"를 기준으로 정렬하고 다른 필드를 일반 정렬 순서로 정렬하려면 다음을 수행하십시오.
SELECT id, name, priority
FROM mytable
ORDER BY FIELD(name, "core") DESC, priority
하지만 여기에는 몇 가지주의 사항이 있습니다.
첫째, 이것이 mysql 전용 기능이라고 확신합니다. 질문에는 mysql 태그가 지정되어 있지만 여러분은 결코 알 수 없습니다.
둘째, FIELD()
작동 방식에 주의 하십시오. 값 의 1 기반 인덱스 를 FIELD(priority, "core")
반환합니다.의 경우 "core"가 값이면 1을 반환합니다. 필드 값이 목록에 없으면 0 을 반환 합니다 . 이것이 DESC
가능한 모든 값을 지정하지 않는 한 필요한 이유 입니다.
일반적으로 할 수 있습니다.
select * from your_table
order by case when name = 'core' then 1 else 2 end,
priority
특히 MySQL에서는 다음을 수행 할 수도 있습니다.
select * from your_table
order by name <> 'core',
priority
MySQL의 비교 결과는 0
또는 이므로 해당 결과를 기준으로 1
정렬 할 수 있습니다.
특정 행에 우선 순위를 부여하는 한 가지 방법은 우선 순위에 많은 수를 추가하는 것입니다. 다음 CASE
명령문으로 이를 수행 할 수 있습니다 .
select id, name, priority
from mytable
order by priority + CASE WHEN name='core' THEN 1000 ELSE 0 END desc
데모 : http://www.sqlfiddle.com/#!2/753ee/1
이것은 Postgres 9 이상을 사용하는 나를 위해 작동합니다.
SELECT *
FROM your_table
ORDER BY name = 'core' DESC, priority DESC
한 가지 방법은 다음과 같습니다.
select id, name, priority from table a
order by case when name='core' then -1 else priority end asc, priority asc
SELECT * FROM cars_new WHERE status = '1' and car_hide !='1' and cname IN ('Executive Car','Saloon','MPV+','MPV5') ORDER BY FIELD(cname, 'Executive Car', 'Saloon','MPV+','mpv5')
이 작업을 수행:
SELECT * FROM table ORDER BY column `name`+0 ASC
+0을 추가하면 다음을 의미합니다.
0, 10, 11, 2, 3, 4
됩니다 :
0, 2, 3, 4, 10, 11
Use this:
SELECT *
FROM tablename
ORDER BY priority desc, FIELD(name, "core")
참고URL : https://stackoverflow.com/questions/14104055/ordering-by-specific-field-value-first
'Program Tip' 카테고리의 다른 글
TextView의 텍스트 기본 색상은 무엇입니까? (0) | 2020.11.09 |
---|---|
레이아웃이없는 Razor보기 (0) | 2020.11.09 |
SQL Server® 2016 Express 전체 다운로드 (0) | 2020.11.09 |
Mac OS X에서 터미널 창에 코드를 vim에 붙여 넣기 (0) | 2020.11.09 |
문자열의 문자 순서를 반대로 (0) | 2020.11.09 |