我有一张桌子:
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 :(得分: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
嗯,这只是一个建议:)