获得最大分数并存储在另一列中

发布于 2025-02-09 11:07:55 字数 1391 浏览 3 评论 0原文

这是我的表:

student_idobjectig_id总数最大
101190
102280
103195
101182
103276
104195
101271

我想在特定主题中获得最大总数,并随时将其存储在另一列中列插入或更新。

桌子的外观:

student_idobject_id总数最大
10119095
10228071
10319595
10118295
10327680
10419595 95
101280这就是我希望

我尝试了此询问与所有学生_ID相比,不会在每个主题中添加最大分数。

SELECT MAX(`total`) AS highest 
FROM results 
GROUP BY student_id

我想我应该为此使用触发器,但是我的正常查询也可以。

This is my table:

student_idsubject_idtotalmax
101190
102280
103195
101182
103276
104195
101271

I want to get the max total in a particular subject and store it in another column whenever the total column is inserted or updated.

This is what I want the table to look like:

student_idsubject_idtotalmax
10119095
10228080
10319595
10118295
10327680
10419595
10127180

I have tried this query but it doesn't add the max scores in each subject against all the student_id.

SELECT MAX(`total`) AS highest 
FROM results 
GROUP BY student_id

I suppose I should use a trigger for this but the normal query is also okay by me.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

陈甜 2025-02-16 11:07:55

如果您的表格中尚不存在,则需要使用Alter语句添加它。

ALTER TABLE <your_table_name> ADD max INT;

然后,您可以首先使用聚合选择每个“ max ”值“ objection_id ”,然后在update> update> update>更新语句中使用它来利用a <<代码>加入操作:

UPDATE     <your_table_name>
INNER JOIN (SELECT subject_id, 
                   MAX(total) AS total_max
            FROM <your_table_name>
            GROUP BY subject_id) cte
        ON <your_table_name>.subject_id = cte.subject_id
SET <your_table_name>.max = cte.total_max;

检查演示在这里

If your column does not yet exist in your table, you need to add it with an ALTER statement.

ALTER TABLE <your_table_name> ADD max INT;

Then you can first select the "max" value for each "subject_id" using an aggregation, then use it inside the UPDATE statement exploiting a JOIN operation:

UPDATE     <your_table_name>
INNER JOIN (SELECT subject_id, 
                   MAX(total) AS total_max
            FROM <your_table_name>
            GROUP BY subject_id) cte
        ON <your_table_name>.subject_id = cte.subject_id
SET <your_table_name>.max = cte.total_max;

Check the demo here.

趁微风不噪 2025-02-16 11:07:55

假设您正在使用MySQL 8+。

理想情况下,您应该在选择这样的同时获得此类数据,而不是将Maxtotal数据存储在每列中:

WITH CTE AS (SELECT subject_id,MAX(total) AS MaxTotal
FROM results
GROUP BY subject_id
)
SELECT results.*,CTE.MaxTotal
FROM results
JOIN CTE ON results.subject_id = CTE.subject_id;

但是,如果您仍然需要更新它,请使用Updatejoin> join >

WITH CTE AS (SELECT subject_id,MAX(total) AS MaxTotal
FROM results
GROUP BY subject_id
)
UPDATE results 
JOIN CTE ON results.subject_id = CTE.subject_id
SET results.MaxTotal = CTE.MaxTotal;

更新后的输出:

student_idobjectig_id总计maxtotal
10119095
10228080
10319595
10118295
10327680
10419595
95 10127180

参见this

Assuming you are using MySQL 8+.

Ideally, instead of storing MaxTotal data into each column, you should get such the data while selecting like this:

WITH CTE AS (SELECT subject_id,MAX(total) AS MaxTotal
FROM results
GROUP BY subject_id
)
SELECT results.*,CTE.MaxTotal
FROM results
JOIN CTE ON results.subject_id = CTE.subject_id;

However, if you still need to update it anyway, use UPDATE with JOIN

WITH CTE AS (SELECT subject_id,MAX(total) AS MaxTotal
FROM results
GROUP BY subject_id
)
UPDATE results 
JOIN CTE ON results.subject_id = CTE.subject_id
SET results.MaxTotal = CTE.MaxTotal;

Output after the update:

student_idsubject_idtotalMaxTotal
10119095
10228080
10319595
10118295
10327680
10419595
10127180

See this db<>fiddle.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文