MariaDB:使用 SET @variable 从查询创建视图
Posted
技术标签:
【中文标题】MariaDB:使用 SET @variable 从查询创建视图【英文标题】:MariaDB: Creating View from query with SET @variable 【发布时间】:2021-12-27 14:52:45 【问题描述】:我创建了一个查询,我在开始时设置了一些变量。现在我想创建一个视图,但在 mariaDB 中不允许使用 SET @。
这是查询的想法(完整的查询很长,而且几乎相同):
SET @Value1:=0;
SET @Value2:=0;
SET @ValueN:=0;
SELECT id,Date,Name,number,Billing,
IF(Billing='Value1' AND NOT isSpecial AND NOT isFirst
AND performance.hour,@Value1:=@Value1+number,
IF(Billing='Value2' AND NOT isSpecial AND NOT isFirst
AND performance.hour,@Value2:=@Value2+number,
...
IF(Billing='ValueN' AND NOT isSpecial AND NOT isFirst
AND performance.hour,@ValueN:=@ValueN+number, '-'))) as Booking
FROM recording
INNER JOIN performance
ON performance.id=recording.performance_id
WHERE customer_id='2'
我可以用ROW_NUMBER() OVER (PARTITION BY Billing, customer_id, isProbatorik, isFirst
“计数”列,但我找不到将数字添加到ROW_NUMBER()
的解决方案。
如果ROW_NUMBER()
为1且数字为3,则下一个ROW_NUMBER()
必须为4。
是否可以通过在每一行上添加数字来“计算”每一列?
【问题讨论】:
右括号在哪里? 查询太大,所以我只是发布它的想法。查询工作正常,但我找不到将它放在视图中的方法:(。SUM(Billing='Value1' AND NOT isSpecial AND NOT isFirst)
几乎可以在没有@value1 的情况下为您提供价值。
谢谢,这对我帮助很大!
【参考方案1】:
ROW_NUMBER()
是一个整数,你可以随意使用算术。例如
, 1 + (ROW_NUMBER() OVER(..) - 1) * 3 AS countx
得到 countx = 1,4,7,..
【讨论】:
我明白了,但我需要存储各个值,因为 ROW_NUMBER() 不知道最后一行的值。如果第一行是 5(我可以只使用算术),第二行将再次为 2,因为 ROW_NUMBER() 不知道我将值 4 添加到第一行。我必须计算并将该行的单个值添加到该计数中,该计数必须由下一行记住。以上是关于MariaDB:使用 SET @variable 从查询创建视图的主要内容,如果未能解决你的问题,请参考以下文章
翻译:DECLARE Variable(已提交到MariaDB官方手册)
翻译:用户变量(User-Defined Variable)(已提交到MariaDB官方手册)
连接到 MariaDb 时出现 MySql Workbench 错误。表“performance_schema.user_variables_by_thread”不存在