[SQL] MySQL의 SQL은 : 특정 항목을 먼저하고 그 다음 나머지 항목을 정렬
SQLMySQL의 SQL은 : 특정 항목을 먼저하고 그 다음 나머지 항목을 정렬
나는 아래의 표를 가지고 있다고 할 수 있습니다.
나는 모든 친구를 얻을 싶지만는 ID (5) 목록의 첫 번째 항목되고 싶어요. 나는 나머지 항목을 수신하는 순서에 대해 걱정하지 않는다.
원하는 쿼리 결과는 다음과 같습니다
friends
-------
id name
5 nahum
1 moshe
2 haim
3 yusuf
4 gedalia
6 dana
이걸 어떻게 할 수 있습니까?
의 MySQL 5.1.x 버전을 사용하여
감사!
해결법
-
==============================
1.
select id,name from friends order by id=5 desc
(당신은 예를 들어, 그렇지 않으면, 나머지 순서 상관 ID를 오름차순으로 휴식하지 않습니다 제공)
select id,name from friends order by id=5 desc, id asc
-
==============================
2.이 시도:
이 시도:
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
-
==============================
3.이 반전 될 수 있도록 나는 시험에 지금의 MySQL에 액세스 할 수 없습니다 ...하지만 당신은 부울 또한 종류의 사실을 사용할 수 있으며, 여러 종류의 필드를 가질 수 있습니다.
이 반전 될 수 있도록 나는 시험에 지금의 MySQL에 액세스 할 수 없습니다 ...하지만 당신은 부울 또한 종류의 사실을 사용할 수 있으며, 여러 종류의 필드를 가질 수 있습니다.
SELECT ... ORDER BY id != 5, id
(당신은 내가 기억할 수없는, 쓰기 ID = 5해야 할 수도 종류 전이나 FALSEs 후 TRUEs.)
편집 : 아, 난 그냥 당신이 내가 진심으로 리차드의 대답 @ 추천이 경우 나머지 순서에 대해 걱정하지 않는다 읽어 보시기 바랍니다.
-
==============================
4.당신이 UNION 쿼리에 대한 동일한 작업을 수행하려는 경우, 예를 들어, 당신은있는 경우 :
당신이 UNION 쿼리에 대한 동일한 작업을 수행하려는 경우, 예를 들어, 당신은있는 경우 :
select id,name from friends UNION select id,name from friends order by id=5 desc
... 당신은 PostgreSQL의에서 예외를 얻을 것입니다 :
만 열 이름이 표현이나 기능이 아니라 사용할 수 있습니다 발생합니다. 힌트 : 모든 SELECT에 표현 / 기능을 추가하거나 절에서로 UNION 이동
이 문제를 얻으려면, 당신은 다음을 사용합니다 :
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
먼저 't'항목을 주문 것이다 의해 순서 있도록 식 (식 5) 다음, 해당 열의 값은 기대 값 (5)과 동일한 지의 여부에 따라 'T'또는 'F'를 반환 쉬다.
-
==============================
5.당신은이 문제를 해결하기 위해 FIELD 절에 의해 MySQL의의 ORDER를 사용해야합니다. 대답이 접수되었습니다 만, 여기에 더 나은 솔루션입니다.
당신은이 문제를 해결하기 위해 FIELD 절에 의해 MySQL의의 ORDER를 사용해야합니다. 대답이 접수되었습니다 만, 여기에 더 나은 솔루션입니다.
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;
이것은보다 낫다
-
==============================
6.당신은 MySQL의에서 필드 ()를 사용할 수 있습니다.
당신은 MySQL의에서 필드 ()를 사용할 수 있습니다.
select id,name from friends order by field(id,5,id)
필드의 첫번째 매개 변수는 (), 나머지는 순서가 당신이 정렬 할 필드 것을 의미한다.
그래서 5 종류의 첫번째, 그리고 (5 없음) ID에서 나머지합니다. 당신이 앞에로 5,1,3을 원하는 경우 필드 (ID, 5,1,3, ID)처럼 할 수 있습니다.
5 필드 (아이디, 아이디, 5)에 의해 마지막에 정렬 선택 될 수있다. 제 2 회 ID는 또한 그것에서 5 제외됩니다.
-
==============================
7.이 코드 중복을 가지고 있지만 그 트릭을 수행하기 때문에 조금 못생긴 :
이 코드 중복을 가지고 있지만 그 트릭을 수행하기 때문에 조금 못생긴 :
select .... where id = 5 union select .... where not id = 5
from https://stackoverflow.com/questions/5417980/mysql-sql-specific-item-to-be-first-and-then-to-sort-the-rest-of-the-items by cc-by-sa and MIT license
'SQL' 카테고리의 다른 글
[SQL] SQL 서버는 어디 식 케이스를 무시 (0) | 2020.04.13 |
---|---|
[SQL] 어떻게 SQL 서버에서 동시에 두 테이블에 데이터를 삽입 할 수 있습니까? (0) | 2020.04.13 |
[SQL] SQL은 두 개의 테이블에서 데이터를 비교 (0) | 2020.04.13 |
[SQL] 교리 2 사용하여 원시 SQL을 실행 (0) | 2020.04.13 |
[SQL] SQL 서버에서 지난 달의 레코드를 가져 오기 (0) | 2020.04.13 |