gpt4 book ai didi

mysql - 如何按多个等级对表进行排序

转载 作者:行者123 更新时间:2023-11-29 12:23:54 25 4
gpt4 key购买 nike

我在根据单个结果表创建和排序排行榜时遇到问题。这是我正在尝试做的一个简单示例;

table results;
Name RaceNo Time
Sam 1 34
Ben 1 27
Sam 2 29
Ken 1 30
Ben 2 32
Sam 3 35
Ken 2 33
Ken 3 38
Ben 3 33

RaceNo=最多16个左右; 名称 = 最多 50 个左右;

我想得到如下排序的输出; 包含比赛行的输出,按总计排序

 Name R1 R2 R3 Total(sum R1-n)
Ben 27 32 33 92
Sam 34 29 35 98
Ken 30 33 38 101

我真正想要的是; 期望的输出是每个比赛排名 1-n,以及 sum(Rank),其中行按 sum(Rank) 排序。

 Name Rnk1 Rnk2 Rnk3 Total(sum Rank1-n)
Ben 1 2 1 4
Sam 3 1 2 6
Ken 2 3 3 8

我不知道如何解决这个问题。以下将对单个种族进行排名,但我不知道如何将所有种族串在一起到单个查询中。

select Name, find_in_set( Time, (select group_concat(Time order by Time) from 
results where RaceNo=1)) as rank from results where RaceNo=1;

这离我想要做的还很远。我正在考虑在 PHP 中循环,但我确信在 MySQL 中有更好的方法。如果有人可以提供帮助,我将非常感激?

最佳答案

你已经完成了最大的部分:

这样,您就可以在一个平面列中拥有所有排名

  SELECT RaceNo, Name,
FIND_IN_SET( Time,
(SELECT GROUP_CONCAT(Time order by Time)
FROM results WHERE RaceNo=m1.RaceNo)) as rank
FROM results m1;

您只需更进一步即可获得特定比赛:

  SELECT m2.Name, SUM(IF(m2.RaceNo=1, m2.rank, 0)) R1
FROM (SELECT RaceNo, Name, FIND_IN_SET( Time,
(SELECT GROUP_CONCAT(Time order by Time)
FROM results
WHERE RaceNo=m1.RaceNo)) as rank
FROM results m1) m2 GROUP BY m2.Name;

因此,您可以执行以下操作生成所有比赛的查询

  ## generating the different columns
SELECT CONCAT(GROUP_CONCAT(
CONCAT("SUM(IF(m2.RaceNo=", RaceNo, ", m2.rank, 0)) R", RaceNo)),
", SUM(m2.rank) Total")
INTO @query
FROM (SELECT DISTINCT RaceNo FROM results ) m;

## inserting the columns in our previous request
SELECT CONCAT("SELECT m2.Name, ", @query,
" FROM (SELECT RaceNo, Name, FIND_IN_SET( Time,
(SELECT GROUP_CONCAT(Time order by Time)
FROM results WHERE RaceNo=m1.RaceNo)) as rank
FROM results m1) m2 GROUP BY m2.Name;")
INTO @query;

## execute it as a statement
mysql> PREPARE stmt FROM @query;
mysql> EXECUTE stmt;
+------+------+------+------+-------+
| Name | R1 | R2 | R3 | Total |
+------+------+------+------+-------+
| Ben | 1 | 2 | 1 | 4 |
| Ken | 2 | 3 | 3 | 8 |
| Sam | 3 | 1 | 2 | 6 |
+------+------+------+------+-------+
3 rows in set (0.00 sec)

关于mysql - 如何按多个等级对表进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28623922/

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