sum sql与不同的列

时间:2012-08-06 15:36:46

标签: mysql

我有一张桌子:

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。

2 个答案:

答案 0 :(得分: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;

答案 1 :(得分:0)

我认为这只是最有效的解决方案。你有一个非常差的表结构。如果我是你,你必须像这样做表格结构:

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

所以这将是结构的查询:

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

嗯,这只是一个建议:)