mysql - 如何使用临时表的结果更新 MySQL 表
问题描述
我有一个名为assp1的表,其中包含FirstName、LastName、Maths和Overall_Ranking 字段。我正在运行一个查询,该查询将根据数学分数对每个学生进行排名。该查询工作正常,但它有一个临时表的临时变量。所以它只显示查询的结果而不影响表。我想要的是将查询结果放入Overall_Ranking字段。这样排名就会按降序显示谁排在最后。下面是代码,请说明如何将结果放入assp1表的Overall_Ranking列。
SELECT assp1.FirstName, assp1.Maths, assp1.LastName, @prev := @curr , @curr := Total_Score, @rank := IF( @prev = @curr , @rank , @rank +1 ) AS Overall_Ranking
FROM assp1, (
SELECT @curr := NULL , @prev := NULL , @rank :=0
)tmp_tbl
WHERE assp1.Grade = 'Grade7' && assp1.class = '7A' && YEAR( assp1.created_at ) = YEAR( CURDATE( ) )
ORDER BY assp1.Total_Score DESC
解决方案
基本上你加入原始和你的选择
我简化了你的查询
UPDATE assp1 a INNER JOIN (SELECT assp1.FirstName, assp1.Maths, assp1.LastName, @rank := IF( @curr = Total_Score , @rank , @rank +1 ) AS Overall_Ranking, @curr := Total_Score as Total_Score
FROM assp1, (
SELECT @curr := NULL , @prev := NULL , @rank :=0
)tmp_tbl
WHERE assp1.Grade = 'Grade7' && assp1.class = '7A' && YEAR( assp1.created_at ) = YEAR( CURDATE( ) )
ORDER BY assp1.Total_Score DESC) b ON a.FirstName = b.FirstName AND a.Maths = b.Maths AND a.LastName = b.LastName
SET a.Overall_Ranking = b.Overall_Ranking
推荐阅读
- terraform - 仅在初始创建时设置 Terraform 变量
- d - 如何从 DMD mars.d 访问模块 AST
- javascript - 如何从 emenet 获取文本?
- google-cloud-platform - 仅以编程方式将较新的文件上传到 Google 存储
- javascript - 当另一个 div 悬停时,CSS 更改单独 div 的背景颜色
- angular-material - Angular Material:如何在用户浏览垫子自动完成中的垫子选项时捕获事件?
- kubernetes - Kubernetes Metric Server 无法收集 Metric
- node.js - mongoose collection.find 多次执行 - 进入条件和 if 语句
- azure - Azure AD B2C - SAML IDP 技术配置文件 - 禁用签名
- docker - Lando 的 mysql 数据库 docker 服务被杀死,没有错误