首页 > 解决方案 > 正确使用 sqlite sum() 函数

问题描述

我正在使用 Sqlite 数据库项目开发 C# WPF。

对于 Sqlite 数据库,我有 3 个表。如下:

姓名:

id -INTEGER
name -TEXT

表格1:

nameID -INTEGER
amnt1   -INTEGER
amnt2   -REAL
amnt3   -INTEGER
amnt4   -INTEGER
amnt5   -INTEGER
amnt6   -INTEGER
entryDate   -TEXT

表2:

id  -INTEGER
nameID -INTEGER
amnt1    -INTEGER
amnt2    -INTEGER
amnt3    -INTEGER
amnt4    -INTEGER
amnt5   -INTEGER
amnt6   -INTEGER
location    -INTEGER
entryDate   -TEXT

首先,我想用 sum() 函数对 Table1 的所有列求和,例如:

select sum(amnt1),sum(amnt2),sum(amnt3),sum(amnt4),sum(amnt5),sum(amnt6) 
from Table1 
where entryDate between '2018-05-01' and '2018-05-20'

和表2总和:

select sum(amnt1),sum(amnt2),sum(amnt3),sum(amnt4),sum(amnt5),sum(amnt6) 
from Table2 
where entryDate between '2018-05-01' and '2018-05-20'

现在我要做的是再次汇总表 1 和表 2 的所有匹配列。我试过像:

select sum(Table1.amnt1)+sum(Table2.amnt1),(Table1.amnt2)+sum(Table2.amnt2),sum(Table1.amnt3)+sum(Table2.amnt3),sum(Table1.amnt4)+sum(Table2.amnt4),sum(Table1.amnt5)+sum(Table2.amnt5),sum(Table1.amnt6)+sum(Table2.amnt6) 
from Table1 
join Table2 On Table1.nameID=Table2.nameID 
where Table1.entryDate between '2018-05-01' and '2018-05-20'

也许我的查询不正确,因此我没有得到正确的结果!没有使查询看起来难看的解决方案是什么?

哦,我尝试使用 SQL Fiddle,但有时它不起作用,仍然是链接:http ://sqlfiddle.com/#!5/9eecb7

如果 sqlfilldle 不起作用,我创建了表并插入数据,如下所示:

CREATE TABLE `Name` ( `id` INTEGER PRIMARY KEY AUTOINCREMENT, `name` INTEGER );
insert into `Name` VALUES(1,'test1');
insert into `Name` VALUES(2,'test2');


CREATE TABLE "Table1" ( `id` INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT, `nameID` INTEGER, `amnt1` INTEGER, `amnt2` INTEGER, `amnt3` INTEGER, `amnt4` INTEGER, `amnt5` INTEGER, `amnt6` INTEGER, `entryDate` TEXT );
INSERT INTO Table1 VALUES(NULL,1,1,1,1,1,1,1,'2018-04-01');
INSERT INTO Table1 VALUES(NULL,2,1,1,1,1,1,1,'2018-05-01');
INSERT INTO Table1 VALUES(NULL,1,1,1,1,1,1,1,'2018-05-06');

CREATE TABLE "Table2" ( `id` INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT, `nameID` INTEGER, `amnt1` INTEGER, `amnt2` INTEGER, `amnt3` INTEGER, `amnt4` INTEGER, `amnt5` INTEGER, `amnt6` INTEGER, `entryDate` TEXT );
INSERT INTO Table2 VALUES(NULL,1,1,1,1,1,1,1,'2018-04-02');
INSERT INTO Table2 VALUES(NULL,1,1,1,1,1,1,1,'2018-05-05');
INSERT INTO Table2 VALUES(NULL,2,1,1,1,1,1,1,'2018-05-06');

标签: sqlsqlite

解决方案


我相信你需要使用UNION ALL

SELECT sum(amnt1),sum(amnt2),sum(amnt3),sum(amnt4),sum(amnt5),sum(amnt6) 
FROM (select amnt1,amnt2,amnt3,amnt4,amnt5,amnt6 
      FROM Table1 
      where entryDate between '2018-05-01' and '2018-05-20'
      UNION ALL 
      select amnt1,amnt2,amnt3,amnt4,amnt5,amnt6 
      FROM Table2 
      where entryDate between '2018-05-01' and '2018-05-20') sub

SQLFiddle 演示


推荐阅读