[SQL] MySQL은 : 기록의 양의 비율에 의한 LIMIT?
SQLMySQL은 : 기록의 양의 비율에 의한 LIMIT?
하자 내가이 같은 값의 목록을 가지고 말 :
id value
----------
A 53
B 23
C 12
D 72
E 21
F 16
..
나는이 목록의 상위 10 %가 필요합니다 - 나는 시도했다 :
SELECT id, value
FROM list
ORDER BY value DESC
LIMIT COUNT(*) / 10
하지만이 작동하지 않습니다. 문제는 내가 쿼리를 수행하기 전에 레코드의 양을 알 수 없다는 것입니다. 어떤 생각인가?
해결법
-
==============================
1.우수 답변의 내가 발견
우수 답변의 내가 발견
SELECT* FROM ( SELECT list.*, @counter := @counter +1 AS counter FROM (select @counter:=0) AS initvar, list ORDER BY value DESC ) AS X where counter <= (10/100 * @counter); ORDER BY value DESC
다른 비율을 얻기 위해 열을 변경합니다.
-
==============================
2.당신은 순서가, 또는 임의의 상황이 일을하는 경우 - 나는 다음과 같은 스타일을 사용하기 시작했습니다 :
당신은 순서가, 또는 임의의 상황이 일을하는 경우 - 나는 다음과 같은 스타일을 사용하기 시작했습니다 :
SELECT id, value FROM list HAVING RAND() > 0.9
당신이 그것을 필요로하는 경우에 무작위하지만 씨앗 (PHP와 예)를 사용할 수 있습니다 제어합니다 :
SELECT id, value FROM list HAVING RAND($seed) > 0.9
마지막으로 -이 것은 일종의 당신이 실제로 행이 삽입 될 때마다 임의의 값을 유지하는 열을 추가 할 수 있습니다를 완벽하게 제어 할 필요가 다음 쿼리 것을 사용하는 것입니다 경우
SELECT id, value FROM list HAVING `rand_column` BETWEEN 0.8 AND 0.9
이 정렬 또는 ORDER BY 필요하지 않기 때문에 - 오히려 O에 비해 O (N) (N LG 전자 N)입니다
-
==============================
3.또한 그와 함께 시도 할 수 있습니다 :
또한 그와 함께 시도 할 수 있습니다 :
SET @amount =(SELECT COUNT(*) FROM page) /10; PREPARE STMT FROM 'SELECT * FROM page LIMIT ?'; EXECUTE STMT USING @amount;
이 여기에 설명 된 MySQL의 버그 : http://bugs.mysql.com/bug.php?id=19795
이 도움이됩니다 바랍니다.
-
==============================
4.나는 다른 답변에서 했나요되지 않은 대안이 : 당신은 모든 언어에서 액세스 할 경우 MySQL의 API (즉되지는 MySQL CLI)에 대한 전체 액세스 권한이 경우, 당신은 얼마나 많은 행이 것이다 요청 쿼리를 실행할 수 있습니다 하고이 시간이면 루프를 중단.
나는 다른 답변에서 했나요되지 않은 대안이 : 당신은 모든 언어에서 액세스 할 경우 MySQL의 API (즉되지는 MySQL CLI)에 대한 전체 액세스 권한이 경우, 당신은 얼마나 많은 행이 것이다 요청 쿼리를 실행할 수 있습니다 하고이 시간이면 루프를 중단.
EG YN 비돈 :
... maxnum = cursor.execute(query) for num, row in enumerate(query) if num > .1 * maxnum: # Here I break the loop if I got 10% of the rows. break do_stuff...
후자는 항상 필요한 모든 행을 받아 들일 것을 요구 이것은하지 mysql_use_result ()와 함께) mysql_store_result가 (에서만 작동합니다.
OTOH, 내 솔루션에 대한 트래픽이 너무 높을 수 있습니다 - 모든 행을 전달해야합니다.
from https://stackoverflow.com/questions/5615172/mysql-limit-by-a-percentage-of-the-amount-of-records by cc-by-sa and MIT license
'SQL' 카테고리의 다른 글
[SQL] SQL 서버 : 타임 스탬프 열에 명시 적 값을 삽입 할 수 없습니다 (0) | 2020.05.14 |
---|---|
[SQL] SQL 오류 "ORA-01722 : 잘못된 번호" (0) | 2020.05.14 |
[SQL] 오라클의 기본 날짜 형식 (0) | 2020.05.14 |
[SQL] TOP에 대한 N 타이 PostgreSQL의 상당 : LIMIT "관계와?" (0) | 2020.05.14 |
[SQL] 존재 IN에 대한 스파크 교체 (0) | 2020.05.14 |