programing

먼저 특정 필드 값으로 정렬

nicescript 2023. 2. 2. 21:17
반응형

먼저 특정 필드 값으로 정렬

세 개의 열이 있는 테이블이 있습니다.

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 기능도 있습니다.

가능한 모든 값에 대해 완전한 정렬을 원하는 경우:

SELECT id, name, priority
FROM mytable
ORDER BY FIELD(name, "core", "board", "other")

"core"가 우선이고 다른 값이 중요하지 않은 경우:

SELECT id, name, priority
FROM mytable
ORDER BY FIELD(name, "core") DESC

먼저 "core"를 기준으로 정렬하고 다른 필드를 일반 정렬 순서로 정렬하는 경우:

SELECT id, name, priority
FROM mytable
ORDER BY FIELD(name, "core") DESC, priority

단, 여기에는 몇 가지 경고가 있습니다.

우선, 이것은 mysql만의 기능이라고 확신합니다.문제는 mysql 태그가 붙어 있습니다만, 모르는 일입니다.

둘째, 어떻게 하면FIELD()works: 값의 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

사용방법:

SELECT * 
FROM tablename 
ORDER BY priority desc, FIELD(name, "core")

언급URL : https://stackoverflow.com/questions/14104055/ordering-by-specific-field-value-first

반응형