2012-08-06 21 views
0

我有一個表:用型動物之列SQL

CREATE TABLE EXAMPLE 
(
    ID   BIGINT(20), 
    REPORTED_0  INTEGER(11), 
    REPORTED_1  INTEGER(11), 
    REPORTED_2  INTEGER(11), 
    REPORTED_3  INTEGER(11), 
    REPORTED_4  INTEGER(11), 
    REPORTED_5  INTEGER(11), 
    REPORTED_6  INTEGER(11), 
    REPORTED_7  INTEGER(11), 
    REPORTED_8  INTEGER(11), 
    REPORTED_9  INTEGER(11), 
    REPORTED_10  INTEGER(11) 
); 

,我需要通過ID來概括。我這樣做:

SELECT(ID, SUM) 
     a.ID, 
     (a.REPORTED_0 + a.REPORTED_2 + a.REPORTED_3 + a.REPORTED_4 + 
     a.REPORTED_5 + a.REPORTED_6 + a.REPORTED_7 + a.REPORTED_8 + 
     a.REPORTED_9 + a.REPORTED_10) 
FROM EXAMPLE a 
GROUP BY a.ID; 

是否有任何更有效的方法來做到這一點?

對不起,但我很喜歡sql。

+0

爲什麼你需要分組?你究竟想達到什麼目的? – 2012-08-06 15:42:30

+0

不是真的;除了創建一個帶有ID,ReportedID和報告值的表格 – 2012-08-06 15:42:33

+0

它看起來像「GROUP BY」是不必要的,因爲您在同一行中添加了列,除非每個ID有多個行。但實際上這應該被歸類到另一個表格中,而不是本表中的多個報告列。 – 2012-08-06 15:43:47

回答

2

鑑於您的現有架構,對您的查詢沒有任何效率低下。如果您正在尋找一些語法快捷方式來添加除列之外的所有列而不指定列,則不會找到它。 SUM()函數用於對行進行求和,而不是對列進行求和。

由於您從單個表格中進行選擇,因此不需要表格別名,而且您錯過了原始查詢中的某一列。此外,您的查詢不會很好地處理NULL。你可能想把它們當作0.這是一個重寫的查詢,它應該可以做你想要的:

SELECT ID, 
    (
    COALESCE(REPORTED_0,0) + COALESCE(REPORTED_1,0) + COALESCE(REPORTED_2,0) + 
    COALESCE(REPORTED_3,0) + COALESCE(REPORTED_4,0) + COALESCE(REPORTED_5,0) + 
    COALESCE(REPORTED_6,0) + COALESCE(REPORTED_7,0) + COALESCE(REPORTED_8,0) + 
    COALESCE(REPORTED_9,0) + COALESCE(REPORTED_10,0) 
) AS REPORTED_TOTAL 
FROM EXAMPLE 
GROUP BY ID; 
0

我認爲這只是最有效的解決方案。你的桌子結構非常差。如果我是你,你所要做的,表的結構是這樣的:

Create Table Example 
(
    ID    BigInt(20), 
    ReportValue  Int(11), 
    ReportIndex  Int(5) 
) 

因此,這將是結構查詢:

SELECT ID, SUM(ReportValue) 
From Example 
GROUP BY ID 

嗯,這只是一個建議:)