sql - 正确使用 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');
解决方案
我相信你需要使用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
推荐阅读
- ios - 后端更改后,iOS 应用程序需要重新安装其 API 请求才能再次工作
- prolog - 简单约束逻辑编程示例 CLP(Q) 在 Prolog 中给出错误
- firebase - 无法使用提供程序 Flutter 设置从 Firebase 数据库获取的数据
- postgresql - Postgres如何获得日期之间空数据的总和0,月份数
- javascript - 下拉菜单和可折叠菜单之间的引导切换
- python - LSTM 输出只是输入数据的变体
- css - 打字稿材料ui导航栏不起作用
- java - ANDROID:java.lang.NoClassDefFoundError:解析失败:Lcom/mysql/cj/MysqlType
- azure - CI 创建和升级集群
- python - 如何将csv导入sqlite3数据库,列相互匹配?