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

SQL trả về 100 hàng ngẫu nhiên cho mỗi độ tuổi

Bạn có thể sử dụng các biến do người dùng xác định bên dưới truy vấn sẽ cung cấp cho bạn một bản ghi cho mỗi độ tuổi riêng biệt, truy vấn bên trong chỉ là kiểm tra các độ tuổi giống nhau và xếp hạng cho chúng như cho 4 độ tuổi giống nhau (tuổi =1) xếp hạng sẽ là 1,2,3 , 4 và khi age =2 thì số thứ hạng sẽ bắt đầu lại từ 1 và trong đó bộ lọc truy vấn bên ngoài đang lọc các hàng để hiển thị thứ hạng là 1, do đó, đối với mỗi độ tuổi riêng biệt, bạn sẽ nhận được một hàng và chúng được sắp xếp ngẫu nhiên

SELECT  c.name, c.Gender, c.Age, c.MP, c.score
FROM (
SELECT i.name, i.Gender, i.Age, i.MP, b.score,
@r:= CASE WHEN @g = i.Age THEN @r + 1 ELSE 1 END rownum,
@g:=i.Age
FROM i
INNER JOIN b ON b.name=i.name
CROSS JOIN(SELECT @g:=NULL ,@r:=0) a
WHERE i.MP='F' AND i.gender='F' AND b.score<=-1
ORDER BY  i.Age, RAND()
) c
WHERE c.rownum = 1
ORDER BY c.Age
LIMIT 100

giả sử truy vấn đã tham gia của bạn cung cấp cho bạn kết quả là

Tập dữ liệu mẫu

name   gender  Age  Mp score
============================
test1  male    1    1   10
test2  male    1    1   10
test3  male    1    1   10
test4  male    2    1   10
test5  male    2    1   10
test6  male    3    1   10
test7  male    4    1   10
test8  male    4    1   10
.....

Bây giờ sử dụng truy vấn bên trong trong câu trả lời của tôi sẽ cung cấp cho bạn các tập hợp kết quả với cột xếp hạng như bên dưới

Bộ kết quả truy vấn bên trong

name   gender  Age  Mp score rank
==================================
test2  male    1    1   10    1
test1  male    1    1   10    2
test3  male    1    1   10    3
test4  male    2    1   10    1
test5  male    2    1   10    2
test6  male    3    1   10    1
test7  male    4    1   10    1
test8  male    4    1   10    2

Như trong tập kết quả ở trên, bạn có thể thấy đối với age =1 có 3 hàng và thứ hạng của chúng khác nhau 1,2,3 cùng một ví dụ cho age =2 thứ hạng là 1,2 giống nhau đối với age =4, Bây giờ trong câu trả lời của tôi, truy vấn bên ngoài sẽ lọc ra kết quả trong đó rank =1 để tập hợp kết quả cuối cùng sẽ chứa một hàng cho mỗi điểm riêng biệt như xem tập hợp kết quả bên dưới

Kết quả cuối cùng

name   gender  Age  Mp score rank
==================================
test2  male    1    1   10    1
test4  male    2    1   10    1
test6  male    3    1   10    1
test7  male    4    1   10    1

Phần đặt hàng ngẫu nhiên được thực hiện ở truy vấn bên trong vì bạn có thể xem đơn hàng theo từng phần ORDER BY i.Age, RAND() đầu tiên nó sẽ sắp xếp thứ tự độ tuổi theo cách tăng dần và sau đó đối với các giá trị độ tuổi tương tự, nó sẽ tiếp tục sắp xếp các kết quả một cách ngẫu nhiên.

  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. UTF-8:Tổng quát? Thùng rác? Unicode?

  2. Kết nối MySQL không hoạt động

  3. MYSQLI_NUM có nghĩa là gì và làm gì?

  4. Không thể kết nối với MySQL bằng Sequelize

  5. Sử dụng Pentaho Kettle, làm cách nào để tải nhiều bảng từ một bảng trong khi vẫn giữ được tính toàn vẹn của tham chiếu?