mysql - 从排序表的位置为行赋值
问题描述
我有一个带有行的 MySQL 表:id、score 和 rank。我想创建一个对表进行排序并将新位置分配给表的排名值的触发器,例如:id。缺口。分数。秩
John. 8. ?
Mike. 10. ?
Al. 5. ?
Terry. 12. ? SORT BY score= id nick. score. rank.
Terry. 12. 1
Mike 10. 2
John. 8. 3
Al. 5. 4
我知道如何用句子对表格进行排序ORDER BY score DESC
,但我不知道如何将元素的新位置分配给排名。谢谢。
解决方案
我不建议将排名存储在表本身中。这是一个派生信息,可以在需要时动态计算。另一方面,存储它会导致维护它:您会发现自己为每个 DML 操作(更新、插入、删除)创建存储过程。
您可以改为创建一个视图。如果您正在运行 MySQL 8.0 或 MariaDB >= 10.3,则可以使用窗口函数:
create view myview as
select
id,
score,
rank() over(order by score desc) rnk
from mytable
这为您提供了始终最新的数据透视图,且维护成本为 0。
请注意,这rank
是一个 SQL 关键字,因此不是列名的好选择 - 我rnk
改为命名该列。
推荐阅读
- python - Pandas 从包含字典列表的行创建新数据框的方法
- python - 到达边界时如何重置位置
- microsoft-planner - 使用 Power Automate 的 Microsoft Planner 的重复任务
- typescript - 键入泛型函数时,可以省略返回类型吗?
- azure-devops - 如何在 Azure Pipelines 上为 Azure Artifact 源运行“dotnet list package --deprecated”
- excel - 如何在 sub 中包含用户定义的函数 MakeFolderIfNotExist?
- kubernetes - 节点有卷节点亲和性冲突
- python - 从 Pycharms 重复检查中排除文件夹
- kubernetes - Azure Kubernetes - Jaeger UI 未显示作为 ISTIO 的一部分部署的服务?
- javascript - 如何将 javascript 日期初始化为特定时区?