这是我的表:
| 学生标识|主题标识|总计|最大值|
| - -|- -|- -|- -|
| 一百零一|一个|九十||
| 一百零二|2个|八十个||
| 一百零三|一个|九十五个||
| 一百零一|一个|八十二人||
| 一百零三|2个|七十六人||
| 一百零四|一个|九十五个||
| 一百零一|2个|七十一人||
我想获取特定主题中的最大总计,并在插入或更新总计列时将其存储在另一列中。
这就是我想要的表的外观:
| 学生标识|主题标识|总计|最大值|
| - -|- -|- -|- -|
| 一百零一|一个|九十|九十五个|
| 一百零二|2个|八十个|八十个|
| 一百零三|一个|九十五个|九十五个|
| 一百零一|一个|八十二人|九十五个|
| 一百零三|2个|七十六人|八十个|
| 一百零四|一个|九十五个|九十五个|
| 一百零一|2个|七十一人|八十个|
我尝试过这个查询,但它没有将所有student_id的每个科目的最高分数相加。
SELECT MAX(`total`) AS highest
FROM results
GROUP BY student_id
我想我应该为此使用一个触发器,但是普通的查询对我来说也是可以的。
2条答案
按热度按时间txu3uszq1#
如果您的数据行尚未存在于数据表中,则需要使用
ALTER
陈述式来加入它。然后,您可以首先使用聚合为每个“subject_id”选择“max”值,然后在
UPDATE
语句中使用它(利用JOIN
操作):检查演示here。
y1aodyip2#
假设您使用的是MySQL 8+。
理想情况下,您不应该将MaxTotal数据存储到每个列中,而应该在进行如下选择时获取这些数据:
但是,如果仍然需要更新它,请将
UPDATE
与JOIN
一起使用更新后的输出:
| 学生标识|主题标识|总计|最大总计|
| - -|- -|- -|- -|
| 一百零一|一个|九十|九十五个|
| 一百零二|2个|八十个|八十个|
| 一百零三|一个|九十五个|九十五个|
| 一百零一|一个|八十二人|九十五个|
| 一百零三|2个|七十六人|八十个|
| 一百零四|一个|九十五个|九十五个|
| 一百零一|2个|七十一人|八十个|
见此db<>fiddle。