본문 바로가기
MySql

MySQL SUM (users_count)이 1000에 도달 할 때까지 선택할 SQL 쿼리

by 베이스 공부 2020. 9. 30.
반응형

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

 

 

반응형

댓글