You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

保持REGISTRATION_ID为主键,如何按SL_NO有序查询?能否自动计算平均分?

问题解答

1. 不修改主键前提下按SL_NO有序查询

数据库默认会按照主键(REGISTRATION_ID)的存储顺序返回查询结果,要让结果按SL_NO有序显示,只需在查询语句中添加ORDER BY子句即可,无需调整主键设置。

示例查询语句:

SELECT * FROM STUDENT_INFORMATION ORDER BY SL_NO;

如果需要降序排列,可添加DESC关键字:

SELECT * FROM STUDENT_INFORMATION ORDER BY SL_NO DESC;

2. 自动计算AVERAGE字段的值

可以通过**生成列(计算列)**实现自动计算平均值,无需手动插入AVERAGE的值,数据库会基于指定科目成绩自动计算并维护该字段。

主流数据库实现方式:

MySQL/MariaDB

修改表结构,将AVERAGE设为存储型生成列:

ALTER TABLE STUDENT_INFORMATION
MODIFY COLUMN AVERAGE FLOAT NOT NULL 
GENERATED ALWAYS AS ((CSE2001 + CSE2008 + CSE3002) / 3) STORED;

修改完成后,现有数据的AVERAGE会自动更新,后续插入/更新科目成绩时,AVERAGE也会同步计算。

PostgreSQL

先移除原有AVERAGE字段的非空约束,再设置生成列:

ALTER TABLE STUDENT_INFORMATION ALTER COLUMN AVERAGE DROP NOT NULL;
ALTER TABLE STUDENT_INFORMATION
ADD COLUMN AVERAGE FLOAT GENERATED ALWAYS AS ((CSE2001 + CSE2008 + CSE3002) / 3) STORED;
ALTER TABLE STUDENT_INFORMATION ALTER COLUMN AVERAGE SET NOT NULL;

SQL Server

设置持久化计算列:

ALTER TABLE STUDENT_INFORMATION
ALTER COLUMN AVERAGE AS ((CSE2001 + CSE2008 + CSE3002) / 3.0) PERSISTED NOT NULL;

插入数据示例

修改表结构后,插入数据时无需指定AVERAGE字段:

INSERT INTO student_information (SL_NO, REGISTRATION_ID, NAME, AGE, CSE2001, CSE2008, CSE3002, CGPA, BRANCH)
VALUES(11,'21BCE1234','Test Student',18,90,92,94,8.7,'Cse Ai&Ml');

内容的提问来源于stack exchange,提问作者Abhiram Rayidi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.04 00:35:26