SQLite 在视图中使用 Sum() 函数

Posted

技术标签:

【中文标题】SQLite 在视图中使用 Sum() 函数【英文标题】:SQLite usin Sum()-function in a VIEW 【发布时间】:2016-01-03 13:23:02 【问题描述】:

所以我创建了一个视图,在这个视图中我有 person_id、account_id、日期、付款方式和价值。 在付款方式中,我指定了两种不同的方式:提款和存款。提款显示为负值。 我现在要做的是打印出所有提款和存款之和为负数的account_id。

这是我的 CREATE VIEW 代码:

CREATE VIEW payment
    ( personID, AacountID, date, payment_method, value )
AS SELECT pers_id, acc_id, date, 'deposit', value
    FROM deposit
UNION ALL
SELECT pers_id, acc_id, date, 'withdrawal', -value
FROM withdrawal

我不允许在创建视图语句中使用 sum() 函数,我必须在视图上使用查询来打印出所有总体为负值的帐户。 我一直在寻找一段时间,但我刚刚找到了如何在创建视图语句中使用该函数。

【问题讨论】:

“不允许”是什么意思?你有错误吗? 【参考方案1】:

我现在要做的是打印出所有 account_id 的总和 取款和存款为负数

我不能在创建视图语句中使用 sum() 函数

您可以在视图内使用聚合:

CREATE VIEW payment 
AS 
SELECT acountID, SUM("value") AS total
FROM (
  SELECT acc_id AS acountID, "value"
  FROM deposit
  UNION ALL
  SELECT acc_id, -"value"
  FROM withdrawal) AS sub
GROUP BY acountID;

SELECT *
FROM payment
WHERE total < 0;

SqlFiddleDemo

请记住,使用 date/value 之类的关键字是不好的做法。如果您真的需要它们,请使用" 联系它们。

编辑:

'我不允许在创建视图语句中使用 sum() 函数'

再试一次,使用您的视图并使用 HAVING 使用聚合后过滤添加简单聚合:

CREATE VIEW payment 
AS 
SELECT pers_id, acc_id AS accountID, "date", 'deposit' AS payment_method, "value"
FROM deposit
UNION ALL
SELECT pers_id, acc_id, "date", 'withdrawal', -"value"
FROM withdrawal;

查询:

SELECT accountId, SUM("value") AS total
FROM payment
GROUP BY accountId
HAVING total < 0;

SqlFiddleDemo2

【讨论】:

首先,感谢您的回答,但很抱歉,因为我认为我的问题表达有误。我现在将“不能使用 sum() 函数”更改为“我不允许使用”。我想现在很清楚了。 @grantelbart 查看更新。无论如何,你的问题对我来说还是有点不清楚。

以上是关于SQLite 在视图中使用 Sum() 函数的主要内容,如果未能解决你的问题,请参考以下文章

[QT][SQL]sql学习记录5_sqlite视图(View)

在 Android 上用 Java 获取 SQLite SUM

在 SQL Server 2008 中使用集合作为函数/存储过程的参数?

模板未显示通过传递参数使用视图函数从 sqlite 获取的数据(为空白)

我们可以在 Android 中使用 SQLite 数据库上的所有 SQL 查询和函数吗? [关闭]

在sql数据库中,我用聚合函数sum,为啥显示操作数据类型varchar对于sum运算符无效啊?