SQLITE:显示每个类别的总和

3

我有两个表格(inputs和categories):

CREATE TABLE categories (
    iId INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT,
    sName TEXT NOT NULL,
    iParent INTEGER,
    FOREIGN KEY (iParent) REFERENCES categories(iId)
);

CREATE TABLE inputs (
    iId INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT,
    iCategory INTEGER,
    dValue DOUBLE NOT NULL,
    FOREIGN KEY (iCategory) REFERENCES categories(iId)
);

我需要从输入表(inputs table)中为每个类别(category)获取总和(dValue列)。即使总和为零也要返回。

如果可能的话,最好能够获得每个父类别(parent category)的总和(当categories.iId = categories.iParent时,将子类别的结果汇总到父类别中)

有人能帮我吗?我感激任何帮助!谢谢!


在第二部分(将子类别与父类别合并)中,您的分类嵌套层次有多少级? - mellamokb
你能否提供一个包含所有可能边缘情况的样本数据集和期望输出(有子类别的父类别,没有子类别的父类别,没有输入的类别等)? - mellamokb
1个回答

3

试试这个:

select c.iParent, sum(i.dValue)
from categories c
left outer join inputs i on i.iCategory=c.iId
group by c.iParent

编辑: 使用账户:

select c.iParent, a.iCurrency, sum(i.dValue)
from categories c
left outer join inputs i on i.iCategory=c.iId
left outer join accounts a on i.iAccount=a.iId
group by c.iParent,a.iCurrency

1
+1 我想知道 OP 通过 Even if the sum result is zero. 是否意味着没有输入。在这种情况下,应该使用 coalesce(sum(i.dValue), 0) - mellamokb
1
@mellamokb 对 -- 或者可以写成 sum(coalesce(i.dValue, 0)) - Sergey Kalinichenko
1
@Daniel 将条件从 WHERE 子句移至 ON 子句:left outer join inputs i on i.iCategory=c.iId AND c.iType=0 AND i.dtDate BETWEEN '2012-06-01' AND '2012-06-05' - Sergey Kalinichenko
@dasblinkenlight,你就是那个人... 最后一件事,我保证。我有另一个名为“accounts”的表格和其中一个名为“iCurrency”的列。在“inputs”表格中,我有一个指向“accounts”表格的“iAccount”列。我需要对每个类别中的值进行求和,但不能混合货币。例如,可能需要像accounts.iCurrency = 1这样的东西。您能再帮一次忙吗?谢谢。 - Daniel
1
@Daniel请看一下修改后的内容。现在每个类别将会产生与该类别中有输入货币数量相同的行。 - Sergey Kalinichenko
显示剩余3条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接