복붙노트

[SQL] 선택 TOP X (또는 아래) MySQL의 숫자 값에 대한 백분율

SQL

선택 TOP X (또는 아래) MySQL의 숫자 값에 대한 백분율

숫자 값을 포함하는 열에서 TOP X (또는 하부) 비율을 선택의 MySQL에서 사용할 수있는 기능이 있는지 궁금 하였다.

기본적으로, 가격의 목록을 포함하는 열이 나는 단지 가격의 백분위 상단의 열에서 해당 필드를 반환합니다. 어떤 제안?

해결법

  1. ==============================

    1.업데이트 : 훨씬 더 생각 아웃 피사체의 설명을 훨씬 더 여기에 사람을 알고부터. 그럼에도 불구하고, 여전히 계산 백분위에 MySQL은 전혀 임베디드 기능이있어 보인다.

    업데이트 : 훨씬 더 생각 아웃 피사체의 설명을 훨씬 더 여기에 사람을 알고부터. 그럼에도 불구하고, 여전히 계산 백분위에 MySQL은 전혀 임베디드 기능이있어 보인다.

    시험:

    (가격 0.9 * 최대 (가격을 선택)) 가격이> = 가격 SELECT * FROM

    SELECT price FROM prices p1 WHERE
    (SELECT count(*) FROM prices p2 WHERE p2.price >= p1.price) <=
         (SELECT 0.1 * count(*) FROM prices)
    );
    

    이는 가격> = P1을 갖는 단가 테이블의 레코드 번호가 요금 테이블의 레코드의 총 개수의 10 것이다하는 가격 P1을 줄 것이다. 그 후 :

    SELECT * FROM prices WHERE price >= (SELECT price FROM prices p1 WHERE
    (SELECT count(*) FROM prices p2 WHERE p2.price >= p1.price) <=
         (SELECT 0.1 * count(*) FROM prices)
    );
    

    원하는 모든 레코드를 반환합니다.

    참고 :이 쿼리의 성능을 검사하지 않았다, 나는 임시 테이블과 솔루션 / 변수가 더 효과적 생각합니다.

  2. ==============================

    2.그냥 참고로 (내가이 질문은 오래된 몇 년 알고),이 작업을 수행 할 수있는 다른, 청소기 방법으로뿐만 아니라.

    그냥 참고로 (내가이 질문은 오래된 몇 년 알고),이 작업을 수행 할 수있는 다른, 청소기 방법으로뿐만 아니라.

    SELECT * FROM product_table WHERE price >= (SELECT price FROM product_table 
    ORDER BY price DESC LIMIT 1 OFFSET (SELECT 0.1 * COUNT(*) FROM product_table));
    

    나는 매우 큰 데이터베이스를 통해 유사한 쿼리를 실행하고 매우 빠르게 달렸다.

  3. ==============================

    3.MySQL로 변환 SQL Server 쿼리에 응답

    MySQL로 변환 SQL Server 쿼리에 응답

    Select *
    from
    (
        SELECT tbl.*, @counter := @counter +1 counter
        FROM (select @counter:=0) initvar, tbl
        ORDER BY ordcolumn
    ) X
    where counter <= (50/100 * @counter);
    ORDER BY ordcolumn
    

    MySQL의 경우, 레코드의 수에 필요한 일괄 처리 크기 다음 LIMIT를 계산할 수

    SELECT @rows := ROUND(COUNT(*) * 10/100) FROM table;
    PREPARE STMT FROM ‘SELECT * FROM tbl ORDER BY price LIMIT ?’;
    EXECUTE STMT USING @rows;
    

    반대로 바닥 %를, 단지 순서

    SELECT @rows := ROUND(COUNT(*) * 10/100) FROM table;
    PREPARE STMT FROM ‘SELECT * FROM tbl ORDER BY price DESC LIMIT ?’;
    EXECUTE STMT USING @rows;
    

    아차, 어쩌면 DESC는 첫 번째 질의에 속하지만 당신은 의미를 얻는다.

    노트 SQL Server의 경우 TOP N의 PERCENT 절은 확실히 도움이

    select top 10 PERCENT *
    FROM TBL
    ORDER BY price
    
  4. from https://stackoverflow.com/questions/4741239/select-top-x-or-bottom-percent-for-numeric-values-in-mysql by cc-by-sa and MIT license