例如,我有一個Student
表命名的列:id
,name
,marks_obtained
,total_marks
等如何在SQL中添加一列並在單個查詢中同時基於其他列設置其值?
我要添加一個名爲percentage
列,它們的值將等於(marks_obtained
/total_marks
)* 100。
如何在單個查詢中完成整個工作?
例如,我有一個Student
表命名的列:id
,name
,marks_obtained
,total_marks
等如何在SQL中添加一列並在單個查詢中同時基於其他列設置其值?
我要添加一個名爲percentage
列,它們的值將等於(marks_obtained
/total_marks
)* 100。
如何在單個查詢中完成整個工作?
在Oracle 11g中(因爲這被標記的Oracle),可以使用一個虛擬列:
的Oracle 11g R2架構設置:
CREATE TABLE Student (id, name, marks_obtained, total_marks) AS
SELECT 1, 'Alice', 90, 100 FROM DUAL
UNION ALL SELECT 2, 'Bob', 72, 100 FROM DUAL
UNION ALL SELECT 3, 'Claire', 93, 105 FROM DUAL;
ALTER TABLE Student ADD (
percentage NUMBER GENERATED ALWAYS AS (marks_obtained * 100/total_marks) VIRTUAL
);
查詢1:
SELECT * FROM Student
| ID | NAME | MARKS_OBTAINED | TOTAL_MARKS | PERCENTAGE |
|----|--------|----------------|-------------|-------------------|
| 1 | Alice | 90 | 100 | 90 |
| 2 | Bob | 72 | 100 | 72 |
| 3 | Claire | 93 | 105 | 88.57142857142857 |
MySQL版本5.7.4或更高版本還允許您添加「生成」列。 – MT0
如果你不想計算列添加到表中,你可以做在獲取數據的SQL,例如計算:
SELECT id,
name,
marks_obtained,
total_marks,
(marks_obtained/total_marks) * 100 AS PERCENTAGE
FROM STUDENT
祝你好運。
不要向列中添加列,使用百分比列創建視圖(總是新鮮)。存儲計算的數據有點危險,你知道數據不一致。 (如果確實需要將該列添加到表中,請使用觸發器來確保數據一致性。) – jarlh
您使用的是MySQL還是Oracle? – vhu
如果你使用的是MySQL,那麼在MySQL 5.7中可以使用 ,你可以計算出列。請參閱https://dev.mysql.com/doc/refman/5.7/en/create-table.html#create-table-generated-columns。如果您使用Oracle,請參閱下面的答案。 –