我有一个表格,结构如下。 该表主要记录性别= 1的地方。MySQL获得加权结果
我正在寻找一个解决方案来获得结果集,其中60%的记录顶部有性别= 1,40%与性别= 2混合,有序通过人气desc。 性别= 2的成员数量少得多,这意味着结果集应该只有性别= 1的记录。
会员表
id | nickname | gender | popularity
1 | jake | 1 | 80
2 | mike | 1 | 88
3 | dave | 1 | 75
4 | jenny | 2 | 85
5 | peter | 1 | 83
6 | nina | 2 | 88
7 | mister | 1 | 77
8 | drake | 1 | 80
结果应该是这样的,它必须满足不了确切加权列表。目标是看到两性的混合结果。
id | nickname | gender | popularity
2 | mike | 1 | 88
5 | peter | 1 | 83
6 | nina | 2 | 88
1 | jake | 1 | 80
8 | drake | 1 | 80
4 | jenny | 2 | 85
7 | mister | 1 | 77
3 | dave | 1 | 75
我到目前为止的最好成绩是(它不照顾有关40:60分):
SET @rank=0;
SET @rank2=0;
SELECT * FROM (
SELECT @rank:[email protected]+1 AS rank, q.* FROM (SELECT * FROM test WHERE gender = 1 ORDER BY popularity DESC) AS q
UNION
SELECT @rank2:[email protected]+1 AS rank, q.* FROM (SELECT * FROM test WHERE gender = 2 ORDER BY popularity DESC) AS q
) AS r ORDER BY rank;
这是一个需求规格说明,而不是一个问题。请提出问题,并分享您的尝试。 – Shadow
为了澄清,您要求我们提供一个列表,其中最多40%的条目是“性别= 2”,其余是“性别= 1”?或者你是否要求我们制作一份仅按照受欢迎程度排序的列表,如果您期望没有返回“性别= 2”条目,尽管它可能在理论上是可能的? – toonice
@toonice是的我要求提供一个列表,显示40%的条目,其中性别= 2,其余为性别= 1 – nenad007