我正在尝试从我的数据集中获取每周的排名类型结果,并且由于多种技术而失败。
我的数据如下所示:
+------------+------+--------+
| team | week |points |
+------------+------+--------+
| blue | 1 | 10 |
| green | 1 | 15 |
| red | 1 | 16 |
| blue | 2 | 5 |
| green | 2 | 18 |
| red | 2 | 6 |
| blue | 3 | 2 |
| green | 3 | 8 |
| red | 3 | 8 |
+------------+------+--------+
我试图得到这样的东西:
+------------+------+--------+
| team | week | rank |
+------------+------+--------+
| blue | 1 | 3 |
| green | 1 | 2 |
| red | 1 | 1 |
| blue | 2 | 3 |
| green | 2 | 1 |
| red | 2 | 2 |
| blue | 3 | 3 |
| green | 3 | 1 |
| red | 3 | 1 |
+------------+------+--------+
您可以在第3周看到积分是固定的,因此排名也需要固定。并列排名将始终是值中的较低者。(即联合第二将始终排名2 2而不是3 3)。
它可以是存储过程,也可以是视图。但是它必须是MySql。
到目前为止,我有:
SELECT team,
@rnk:= CASE
WHEN @week_id <> week THEN 0
WHEN points = @tot THEN @rnk
ELSE @rnk+1
END
AS rank,
@week_id := week AS wk,
@tot := points AS pts
FROM
(SELECT @rnk:= -1) s,
(SELECT @week_id:= -1) c,
(SELECT *
FROM v_weeklypointtotals
ORDER BY week, points DESC
) t
但是,当从MySql工作台调用时,它的效果很好。但是,当通过PHP调用时,会给出错误的结果。(它没有考虑并列的几周)。我认为这可能与变量设置的顺序有关……但是我很困惑。
试试这个:
select team,week,
(select count(*)+1 from Table1 where week=t1.week
and points >t1.points ) as rank
FROM Table1 t1
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句