我正在尝试获得一个在插入时更新的计算(虚拟)列,以免使用触发器,交叉联接或CTE。我希望做的是按一个字段分组(Col1),然后计算表中给定行占总数的百分比。例如:
+------+-----+------+
| Col1 | Amt | Pct |
+------+-----+------+
| foo | 10 | 0.5 |
| foo | 5 | 0.25 |
| bar | 15 | 1 |
| foo | 5 | 0.25 |
+------+-----+------+
已插入新行... {Col1: bar, Amt: 5}
+------+-----+------+
| Col1 | Amt | Pct |
+------+-----+------+
| foo | 10 | 0.5 |
| foo | 5 | 0.25 |
| bar | 15 | 0.75 |
| foo | 5 | 0.25 |
| bar | 5 | 0.25 |
+------+-----+------+
任何帮助表示赞赏。我尝试搜索包括forks在内的各种帖子,但没有找到在MariaDB上实现此目的的虚拟列方式。
答案 0 :(得分:1)
计算列的每一行中的值都不能依赖于表的其他行中的值。
您可能希望考虑使用视图而不是计算列。这是视图的定义。请注意,它需要所有金额的总和。
SELECT a.Col1, a.Amt,
(100.0 * A.Amt / B.Tot) Pct
FROM tbl a
JOIN (SELECT SUM(Amt) Tot FROM tbl)