2016-12-10 1 views
0

LIMIT 내부에서 하위 쿼리를 사용할 수 있는지 궁금합니다.LIMIT에서 MYSQL 하위 쿼리

내가 이것을 사용하고자하는 이유는 최고의 구매 고객의 20 % (1/5)를 돌려주는 것입니다. 예를 들어

(이 명확하게 작동하지 않습니다하지만) :

SELECT id, revenue 
FROM customers 
ORDER BY revenue DESC 
LIMIT (SELECT (COUNT(*)/5) FROM customer) 

한계에 하위 쿼리를 만들거나 다른 방법으로 20 %를 반환하는 방법이 있나요?

+0

http://stackoverflow.com/questions/4741239/select-top-x-or-bottom-percent-for-numeric-values-in-mysql에 http : // 유래합니다. com/questions/4741239/select-top-x-bottom-percent-for-numeric-values-in-mysql –

+2

사용중인 데이터베이스에 질문을 태그하십시오. –

답변

0

ANSI SQL을 사용하여이 일을 일반적인 방법은 윈도우 기능입니다 :

SELECT id, revenue 
FROM (SELECT c.*, 
      ROW_NUMBER() OVER (ORDER BY revenue DESC) as seqnum, 
      COUNT(*) OVER() as cnt 
     FROM customers 
    ) c 
WHERE seqnum <= cnt * 0.2 
ORDER BY revenue DESC; 

대부분의 데이터베이스는 이러한 기능을 지원합니다.

MySQL은 창 기능을 지원하지 않는 몇 안되는 데이터베이스 중 하나입니다. 당신은 변수를 사용할 수 있습니다 :

SELECT id, revenue 
FROM (SELECT c.*, (@rn := @rn + 1) as rn 
     FROM customers c CROSS JOIN 
      (SELECT @rn := 0) params 
     ORDER BY c.revenue DESC 
    ) c 
WHERE rn <= @rn/5; -- The subquery runs first so @rn should have the total count here. 
+0

그것은 나를 위해 작동하지 않습니다. ROW_NUMBER() 이상 (매출 주문 ORDER)을 seqnum으로 잘못 표시했습니다. MYSQL을 사용하고 있기 때문에 그럴 수 있습니까? – Colin

+0

@ 콜린. . . 그렇습니다. 그래서 그 대답을 편집했습니다. –

+0

감사합니다. 와우 그 작품. 하하,하지만 왜 내 실제 테이블에서 작동하도록 편집할지 모르겠다. – Colin