【问题标题】:adding running total to a query in Google sheets将运行总计添加到 Google 表格中的查询
【发布时间】:2021-05-02 19:09:41
【问题描述】:

在 SQL 术语中,我有下表:

CREATE TABLE Students
(
    id SERIAL PRIMARY KEY,
    Name VARCHAR NOT NULL,
    Age int NOT NULL
);
INSERT INTO Students VALUES (1,'A', 14 );
INSERT INTO Students VALUES (2,'B', 12 );
INSERT INTO Students VALUES (3,'C', 13 );

我可以运行以下查询:

SELECT Id, Name, Age,
SUM (Age) OVER (ORDER BY Id) AS RunningAgeTotal
FROM Students

得到:

name age runningagetotal
A 14 14
B 12 26
B 13 39

这里解释了example

我可以在 Google 表格中做类似的事情吗?

我试过了:

SELECT blah, blah, SUM(C) OVER (ORDER BY A) AS 'Total'
WHERE ...

C 是我想要运行总计的值,A 是 ID,由 ROW() 提供支持,但我得到了:

无法解析函数 QUERY 参数 2 的查询字符串:PARSE_ERROR:在第 2 行第 8 列遇到“”OVER“”。期待以下之一:“where”...“group”...“pivot”。 ..“顺序”...“跳过”...“限制”...“偏移”...“标签”...“格式”...“选项”...“,”... “*”...“+”...“-”...“/”...“%”...

这表明谷歌表格不支持OVER。在不涉及创建辅助数据列的谷歌表格中是否有其他方法可以做到这一点?

【问题讨论】:

    标签: google-sheets spreadsheet


    【解决方案1】:

    您说得对,Google 表格查询中没有“OVER”子句 - 与其他 SQL 实现(如 T-SQL)相比,可用选项有限。

    答案相当违反直觉。您可以利用 SUMIF 函数的行为,它允许您重新评估函数调用的“标准”部分中每个值列表的总和。如果这是行号,您可以获得一个单独的总和,包括并包含数据的每一行,从而为您提供运行总计:

    =ArrayFormula(if(A2:A<>"",sumif(row(A2:A),"<="&row(A2:A),B2:B),))
    

    很遗憾,这在 SUMIFS 中不可用,因此功能相当有限。

    如果您需要更灵活的东西,据我所知,唯一的选择是使用三角矩阵乘法,这在资源方面相当昂贵。

    【讨论】:

      【解决方案2】:

      截至目前,这不能在 QUERY - https://developers.google.com/chart/interactive/docs/querylanguage

      中完成

      你需要像这样应用它:

      ={QUERY({A2:B}, 
       "select Col1,sum(Col2) where Col2 is not null group by Col1 label sum(Col2)''"), 
       INDEX(MMULT(TRANSPOSE((ROW(INDIRECT("Z1:Z"&COUNTA(QUERY({A2:B}, 
       "select sum(Col2) where Col2 is not null group by Col1 label sum(Col2)''"))))<=
       TRANSPOSE(ROW(INDIRECT("Z1:Z"&COUNTA(QUERY({A2:B}, 
       "select sum(Col2) where Col2 is not null group by Col1 label sum(Col2)''"))))))*QUERY({A2:B}, 
       "select sum(Col2) where Col2 is not null group by Col1 label sum(Col2)''")), 
       SIGN(1+N(INDIRECT("Z1:Z"&COUNTA(QUERY({A2:B}, 
       "select sum(Col2) where Col2 is not null group by Col1 label sum(Col2)''")))))))}
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2021-05-01
        • 1970-01-01
        • 1970-01-01
        • 2021-03-25
        • 2014-07-13
        • 1970-01-01
        • 1970-01-01
        • 2011-02-01
        相关资源
        最近更新 更多