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 从查询创建视图的主要内容,如果未能解决你的问题,请参考以下文章

翻译:SET子句(已提交到MariaDB官方手册)

mariadb操作审计

翻译:DECLARE Variable(已提交到MariaDB官方手册)

翻译:用户变量(User-Defined Variable)(已提交到MariaDB官方手册)

连接到 MariaDb 时出现 MySql Workbench 错误。表“performance_schema.user_variables_by_thread”不存在

MariaDB、Workbench 和 ON DELETE SET DEFAULT