Program Tip

특정 필드 값을 기준으로 먼저 정렬

programtip 2020. 11. 9. 20:31
반응형

특정 필드 값을 기준으로 먼저 정렬


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

반응형