반응형
SUM (users_count)이 최대 1000에 도달 할 때까지 내 메시지 대기열에서 행을 선택하려면 SQL 쿼리가 필요합니다. 하지만 반환 된 행이 하나만 있고 해당 행의 users_count가 1000보다 큰 경우에는 문제가 없습니다. .
다음과 같은 것이 필요합니다. (내 자신의 키워드를 추가했습니다)
SELECT * FROM `messages_queue` UNTIL SUM(users_count) < 1000 AT LEAST 1 ROW
이것은 내 테이블 구조입니다.
messages_queue
- msg_id
- msg_body
- users_count (number of message recieptors)
-시간 (시간 입력)
해결 방법
이 솔루션은 누적 합계를 수행하고 합계가 1000을 초과하면 중지됩니다.
SELECT NULL AS users_count, NULL AS total
FROM dual
WHERE (@total := 0)
UNION
SELECT users_count, @total := @total + users_count AS total
FROM messages_queue
WHERE @total < 1000;
즉, 800이라는 두 개의 값이있는 경우 합계는 1600이됩니다. 첫 번째 SELECT는 @total
변수를 초기화하는 것입니다.
단일 행의 값이 1000보다 큰 경우를 제외하고 합계가 1000을 초과하는 것을 방지하려면 엄격한 테스트를 거쳐야하지만 이것이 작동한다고 생각합니다.
SELECT NULL AS users_count, NULL AS total, NULL AS found
FROM dual
WHERE (@total := 0 OR @found := 0)
UNION
SELECT users_count, @total AS total, @found := 1 AS found
FROM messages_queue
WHERE (@total := @total + users_count)
AND @total < 1000
UNION
SELECT users_count, users_count AS total, 0 AS found
FROM messages_queue
WHERE IF(@found = 0, @found := 1, 0);
참조 페이지 https://stackoverflow.com/questions/7097413
반응형
'MySql' 카테고리의 다른 글
MySQL Oracle에 연결하기 위해 mysql에서 SID를 찾는 방법 (0) | 2020.10.01 |
---|---|
MySQL에서 정수 (문자열로 렌더링)는 몇 개의 문자를 사용합니까? (0) | 2020.09.30 |
MySQL 저장 함수에서 배열 반환 (0) | 2020.09.30 |
MySQL 높은 CPU 사용량 및 영구 링크 (0) | 2020.09.30 |
MySQL 쿼리 : 행의 평균 값을 계산하는 방법은 무엇입니까? (0) | 2020.09.30 |
댓글