gpt4 book ai didi

mysql - 按周排名分组排名

转载 作者:行者123 更新时间:2023-11-29 08:10:45 25 4
gpt4 key购买 nike

我试图从我的数据集中获取每周排名类型的结果,但使用多种技术都失败了。

我的数据如下所示:

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

它可以是存储过程、 View 或任何东西。但必须是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

关于mysql - 按周排名分组排名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21672558/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com