MYSQL Select form users table,其中一半是女性,一半是男性



我正在寻找一种方法,从用户表中选择一个名为'gender'的字段其中50%的结果值为"女性",50%为"男性"。这是我的实际查询:

SELECT *
          FROM geo_sorted_users_de_prod AS r1 JOIN
               (SELECT CEIL(RAND() *
                             (SELECT MAX(id)
                                FROM geo_sorted_users_de_prod)) AS id )
                AS r2
         WHERE r1.id >= r2.id
         AND Length(descr) > 10
         ORDER BY r1.id ASC
         LIMIT 11

我想避免,运行2个查询

想象YOUR_TABLE是您的查询,带有额外的random_id,但没有LIMIT 11

步骤1 :分配row_number()。在mySql中没有它,所以你需要使用变量来模拟。

SELECT t.*, 
     @rownum := if(gender = @gender, @rownum + 1, 1) AS RowNumber,
     @gender := gender  
FROM YOUR_TABLE t, 
     (SELECT @rownum := 0, @gender = '') r
ORDER BY gender, random_id

步骤2:选择每个类别需要的数量。由于order by random_id,每个类别将选择随机行。

SELECT *
FROM Step1
WHERE (gender = 'male' and RowNumber <= 5)
   OR (gender = 'female' and RowNumber <= 6)

最新更新