mysql - 在 MariaDB 5.5.52 中使用生成的列

标签 mysql sql mariadb

我有一个有效的 sql 语句,如下所示:

SELECT SUM(CASE WHEN faell_art='monatlich' THEN betrag*12 END) + SUM(CASE WHEN faell_art='vierteljährlich' THEN betrag*4 END) + SUM(CASE WHEN faell_art='halbjährlich' THEN betrag*2 END) + SUM(CASE WHEN faell_art='jährlich' THEN betrag END) as total FROM banking

现在我想创建一个具有完全相同功能的生成列。我尝试过这个声明:

ALTER TABLE `banking` ADD `test` DECIMAL(10,2) AS (SUM(CASE WHEN faell_art='monatlich' THEN betrag*12 END) + SUM(CASE WHEN faell_art='vierteljährlich' THEN betrag*4 END) + SUM(CASE WHEN faell_art='halbjährlich' THEN betrag*2 END) + SUM(CASE WHEN faell_art='jährlich' THEN betrag END)) AFTER `kommentar`;

但是它不起作用(“#1901 - 列“test”不允许使用函数或表达式”)。

有什么帮助吗?谢谢:-)

最佳答案

有一个限制:

subqueries or anything that depends on data outside the row are not allowed (these are not deterministic because the underlying data can change).

所有聚合函数(SUM,...)都与表中的其他记录一起操作。

Virtual (Computed) Columns .

因此,无法创建该生成的列。或者,您可以创建一个 View 。

关于mysql - 在 MariaDB 5.5.52 中使用生成的列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43682052/

相关文章:

sql - PostgreSQL 中的递归树查询

mysql - 如何使用从表中选择的值并将其用于一个查询中另一个表中的下一个选择?

php - 提交表单问题...回车键

mysql - 剪切/优化 radacct 表 (FreeRADIUS)

mysql - 如何将 .dmp 文件 (Oracle) 导入 MySql DB?

php - PhalconPHP 数据库事务在服务器上失败

mysql - Golang 连接到 docker 连接到我的 sql docker getsockopt : connection refused

MySQL 查询 - 对一个相关表求和 - 对另一个相关表进行计数

mysql - Django MySQL 添加外键

mysql - 如何计算年份及其值(value)?