按每周排名分组排名

djangoat

我正在尝试从我的数据集中获取每周的排名类型结果,并且由于多种技术而失败。

我的数据如下所示:

+------------+------+--------+
| 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

SQLFiddle demo

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章