mysql - 局部变量和前面的列

标签 mysql sql mariadb

我试图在查询中使用 @variable1 + @variable2 但实际上给出的结果是 0。

玛丽亚数据库 服务器版本:10.2.21

set @start_at = '2019-01-01';
set @end_at = '2019-01-16';
set @receivable = 0;
set @invoiced = 0;
SELECT DISTINCT Customer.custnr 'Customer Number',
                Address.name    'Name',
                @receivable := sum(case
                      WHEN [condition1 <= @start_at]
                        AND Transactions.`key` not in [subquery]
                        THEN Transactions.amount
                      ELSE 0 END) 'Account Receivable',
                @invoiced := sum(case
                      WHEN [condition1 between @start_at and @end_at]
                        AND [condition2]
                        AND [condition3]
                        AND Transactions.`key` not in [subquery]
                        THEN Transactions.amount
                      ELSE 0 END) 'Invoiced',
                @receivable + @invoiced 'Total'
FROM LocalCust
       INNER JOIN Customer
                  on Customer.`key` = LocalCust.customerkey
       INNER JOIN Address
                  on Address.`key` = Customer.addresskey
       INNER JOIN Location
                  on Location.`key` = LocalCust.localkey
       INNER JOIN Transactions
                  on Transactions.localcustkey = LocalCust.`Key`
GROUP BY Transactions.localcustkey;

结果: Result from query

最佳答案

使用子查询,完全不使用变量:

SELECT x.*, (Account_Receivable + Invoice) as Total
FROM (SELECT c.custnr as Customer_Number, a.name, 
             sum(case when condition1 <= @start_at and
                           t.`key` not in [subquery]
                      then t.amount
                      else 0 
                 end) as Account_Receivable,
             sum(case when condition1 between @start_at and @end_at and
                           [condition2] and
                           [condition3] and
                           t.`key` not in [subquery]
                      then t.amount
                      else 0 
                 end) as Invoiced
      FROM LocalCust lc JOIN
           Customer c
           on c.`key` = lc.customerkey JOIN
           Address a
           on a.`key` = c.addresskey JOIN
           Location l
           on l.`key` = lc.localkey join
           Transactions t
           on t.localcustkey = lc.`Key`
      GROUP BY c.custnr, a.name
     ) x;

注意事项:

  • 表别名使查询更易于编写和阅读。
  • SELECT DISTINCT 几乎不需要 GROUP BY
  • GROUP BY 键应与 SELECT 中的未聚合列相匹配。
  • 选择不需要转义的列别名。也就是说,没有空格。

关于mysql - 局部变量和前面的列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55816886/

相关文章:

mysql - 获取 MySQL 中每组的最新行

mysql - 按月/年分组并对所有数据求和

PHP MySQL PDO 执行函数在两次使用相同参数时不给出任何结果

mysql - SQL 前向引用语法

c# - 建立博客数据模型的最佳实践

php - 服务器接收到作为二维码扫描器的客户端手机的二维码扫描结果后,如何将查询结果显示在php页面上

MySQL 在索引中使用自定义字符串比较运算符

MYSQL按短语中的每个单词分组以计数/量化比率

mysql - 我怎样才能正确地按阶梯进行排序?

mysql - 为日期范围内的每一天创建一行?