gpt4 book ai didi

如果列值出现一次,MySQL 重新排列/重新排序行位置

转载 作者:行者123 更新时间:2023-11-29 05:18:54 26 4
gpt4 key购买 nike

在如下例所示的表格中,

+--------+-------------------+-----------+
| ID | Name | Score |
+--------+-------------------+-----------+
| 1 | John | 80 |
| 2 | John | 75 |
| 3 | Daniel | 70 |
| 4 | Lisa | 60 |
| 5 | Joe | 74 |
+--------+-------------------+-----------+

我想选择名字并根据他们的分数定位它们,但仍然要确保如果同一个名字出现两次,那么能够将它向下推(这样在上面的例子中约翰不会在之后出现两次彼此)。例如,当我检索它时,它应该采用以下格式:

+--------+-------------------+-----------+
| ID | Name | Score |
+--------+-------------------+-----------+
| 1 | John | 80 |
| 2 | Joe | 74 |
| 3 | Daniel | 70 |
| 4 | Lisa | 60 |
| 5 | John | 75 |
+--------+-------------------+-----------+

如果这样的查询是可能的,那么我们甚至可以控制行下方的推送距离吗?

最佳答案

试试这个:

SELECT  @RN := @RN + 1 AS ID,Name,Score FROM 
(SELECT T1.Name, T1.Score, count(*) as RN1
FROM TableName T1
JOIN TableName T2 ON T1.Name = T2.Name AND T1.Score <= T2.Score
GROUP BY T1.Name, T1.Score) TempTable,(SELECT @RN := 0) R
ORDER BY RN1, Score DESC

结果:

ID  NAME    SCORE
1 John 80
2 Joe 74
3 Daniel 70
4 Lisa 60
5 John 75

SQL Fiddle 中的示例结果.

解释:

如果您执行内部查询,您将获得按 score desc 排序的记录以及列 RN1,John 为 2,其他人为 1。它基本上是一个排名系统。然后我们将根据 RN1 列的结果排序。所以你会得到带有名字和分数的结果。

外层查询用于添加ID列(实际上是行号列)。

关于如果列值出现一次,MySQL 重新排列/重新排序行位置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28809564/

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