2016-12-05 1 views
1

안녕하세요. 저는 이렇게 많은 행이있는 큰 테이블을 가지고 있습니다. 내가 원하는Mysql 조합 선택

ID/NAME /CNT 
6/yassine/2 
5/yassine/9 
4/yassine/10 
3/yassine/12 
2/yassine/8 
1/yassine/3 

는 그 후에 순서를 ID로 제 및 CNT 의해 나머지 출력 그렇게 보여 6/5/4/3이다 내림차순으로 상위 4 ID 순서를 선택하는 그것 같이이다 : 6/5/3/4. 무엇 제가 시도하는

유니언 (ID 내림차순 제한에 의해 나타난 순서에서 * 2 선택)이다

( 선택 *를 (ID 내림차순 제한 CNT 내림차순 의해 4) 순서 테이블 순서에서 선택한 *)

하지만 작동하지 않는 것 같습니다. 어느 누구도 제발 도와 줄 수 없나요? 업데이트 1 : 출력

ID/NAME /CNT 
    6/yassine/2 
    5/yassine/9 
    3/yassine/12 
    4/yassine/10 
+0

이 같은 데이터를 정렬하는 명확한 방법은 없습니다. 무엇을 성취하려고합니까? –

+0

@TimBiegeleisen 업데이트를 확인하십시오. 방금 원하는 출력을 추가했습니다. – Yassine

+0

'ID' 또는 'CNT' 열은 출력에 정렬되지 않습니다. 그러한 결과에 어떻게 도달했는지에 대한 논리를 제공 할 수 있습니까? –

답변

2

사용 union ID를 기반으로 상위 2 레코드를 선택하고 계산 필드를 추가 ID로 3-4 기록을 끌어 다른 쿼리로, 1로 계산 필드를 추가하는 쿼리를 결합 0. 계산할 필드의 값에 따라 조건문을 사용하는 전체 order by 절을 추가하십시오.

(select id, cnt, 1 as srt from yourtable order by id desc limit 2) 
union 
(select id, cnt, 0 as srt from yourtable order by id desc limit 2, 2) 
order by srt desc, if(srt=1, id, cnt) desc 
+0

두번째'LIMIT '진술 문에 문제가있다. –

+0

@TimBiegeleisen을 (를) 관리하는 데주의해야합니까? – Shadow

+0

샴페인처럼 일했습니다! – Yassine

0

난 당신이 하위 쿼리와 함께이 작업을 수행해야한다고 생각 :

select t.* 
from (select t.*, (@rn := @rn + 1) as rn 
     from t cross join 
      (select @rn := 0) params 
     order by id desc 
     limit 4 
    ) t 
order by (case when rn <= 2 then id 1 else 2 end), 
     (case when rn <= 2 then id end), 
     cnt;