Mysql
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Mysql

Một truy vấn SQL để chọn cho đến khi SUM (users_count) đạt đến 1000

Giải pháp này sẽ thực hiện một tổng tích lũy, dừng lại khi tổng vượt quá 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;

Điều đó có nghĩa là nếu bạn có hai giá trị, chẳng hạn, 800, thì tổng cộng sẽ là 1600. CHỌN đầu tiên chỉ để khởi tạo @total biến.

Nếu bạn muốn ngăn tổng không vượt quá 1000, ngoại trừ trường hợp một hàng có giá trị lớn hơn 1000, thì tôi nghĩ điều này hiệu quả, mặc dù bạn sẽ cần phải trải qua một số thử nghiệm nghiêm ngặt:

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);


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Làm thế nào để chèn hình ảnh trong blob trong bảng mysql chỉ sử dụng cú pháp sql (không có PHP)?

  2. Dự án Java đã hoàn thành, hiện đang tạo tệp jar hoặc .exe (với Cơ sở dữ liệu)

  3. Cách nhập tệp CSV vào bảng MySQL

  4. Tại sao bản cập nhật MySQL này không hoạt động?

  5. Express js req.body trả về trống