gpt4 book ai didi

mysql - 如何使用 WHERE 子句和 UNION ALL 在 MySQL 中排名

转载 作者:行者123 更新时间:2023-11-29 01:00:48 25 4
gpt4 key购买 nike

我需要一些关于 MySQL 查询的帮助。我正在尝试使用 WHERE 子句对参与者进行排名。所以,我想分别对新手、中级和有经验的人进行排名。例如:

Rank Name    Grade  Type
----------------------------------
1 Bob 98 Novice
2 Jill 88 Novice
3 Jimmy 42 Novice
1 Mark 87 Intermediate
2 Scott 85 Intermediate
3 Jim 77 Intermediate
1 Jane 90 Advanced
2 John 89 Advanced
3 Josh 87 Advanced

我试过:

SET @rank=0;

(SELECT @rank:=@rank+1 AS rank, name, grade, type FROM myTable WHERE type='novice' ORDER BY grade DESC)
UNION ALL
(SELECT @rank:=@rank+1 AS rank, name, grade, type FROM myTable WHERE type='intermediate' ORDER BY grade DESC)
UNION ALL
(SELECT @rank:=@rank+1 AS rank, name, grade, type FROM myTable WHERE type='experienced' ORDER BY grade DESC)

我想我需要以某种方式重新设置排名。也许我还有其他问题?

最佳答案

使用:

SELECT t.name,
t.grade,
t.type,
(SELECT COUNT(*)
FROM YOUR_TABLE x
WHERE x.type = t.type
AND x.grade >= t.grade) AS rank
FROM YOUR_TABLE t

要处理两个成绩列,请使用:

SELECT t.name,
t.grade1,
t.grade2,
t.type,
(SELECT COUNT(*)
FROM YOUR_TABLE x
WHERE x.type = t.type
AND (x.grade1 + x.grade2) >= (t.grade1 + t.grade2)) AS rank
FROM YOUR_TABLE t

我如何将新手和中级放在一起,将高级分别排列?

使用:

SELECT y.*,
(SELECT COUNT(*)
FROM (SELECT *,
CASE t.type
WHEN 'Advanced' THEN t.type
ELSE 'Non-Advanced'
END AS group_type
FROM YOUR_TABLE) x
WHERE x.group_type = y.group_type
AND (x.grade1 + x.grade2) >= (y.grade1 + y.grade2)) AS rank
FROM (SELECT t.name,
t.grade1,
t.grade2,
t.type,
CASE t.type
WHEN 'Advanced' THEN t.type
ELSE 'Non-Advanced'
END AS group_type
FROM YOUR_TABLE t) y

关于mysql - 如何使用 WHERE 子句和 UNION ALL 在 MySQL 中排名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3398386/

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