2015-09-08 24 views
-2

例如,我有一個Student表命名的列:idnamemarks_obtainedtotal_marks如何在SQL中添加一列並在單個查詢中同時基於其他列設置其值?

我要添加一個名爲percentage列,它們的值將等於(marks_obtained/total_marks)* 100。

如何在單個查詢中完成整個工作?

+2

不要向列中添加列,使用百分比列創建視圖(總是新鮮)。存儲計算的數據有點危險,你知道數據不一致。 (如果確實需要將該列添加到表中,請使用觸發器來確保數據一致性。) – jarlh

+2

您使用的是MySQL還是Oracle? – vhu

+0

如果你使用的是MySQL,那麼在MySQL 5.7中可以使用 ,你可以計算出列。請參閱https://dev.mysql.com/doc/refman/5.7/en/create-table.html#create-table-generated-columns。如果您使用Oracle,請參閱下面的答案。 –

回答

1

在Oracle 11g中(因爲這被標記的Oracle),可以使用一個虛擬列:

SQL Fiddle

的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 

Results

| ID | NAME | MARKS_OBTAINED | TOTAL_MARKS |  PERCENTAGE | 
|----|--------|----------------|-------------|-------------------| 
| 1 | Alice |    90 |   100 |    90 | 
| 2 | Bob |    72 |   100 |    72 | 
| 3 | Claire |    93 |   105 | 88.57142857142857 | 
+0

MySQL版本5.7.4或更高版本還允許您添加「生成」列。 – MT0

0

如果你不想計算列添加到表中,你可以做在獲取數據的SQL,例如計算:

SELECT id, 
     name, 
     marks_obtained, 
     total_marks, 
     (marks_obtained/total_marks) * 100 AS PERCENTAGE 
    FROM STUDENT 

SQLFiddle here

祝你好運。

相關問題