Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ionic-framework/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 我想在一个select查询中获得3个或更多列的总数_Mysql - Fatal编程技术网

Mysql 我想在一个select查询中获得3个或更多列的总数

Mysql 我想在一个select查询中获得3个或更多列的总数,mysql,Mysql,查询示例: 我创建了一个查询,在一个月内得到总数,我想添加3列 SELECT SUM(vatPrivate) AS vatPrivate, SUM(vatGovernment) AS vatGovernment, SUM(vatZero) AS vatZero FROM transaction gl WHERE (gl.entryDate) BETWEEN '2019-11

查询示例: 我创建了一个查询,在一个月内得到总数,我想添加3列

SELECT 
            SUM(vatPrivate) AS vatPrivate,
            SUM(vatGovernment) AS vatGovernment,
            SUM(vatZero) AS vatZero

            FROM transaction gl
            WHERE (gl.entryDate) BETWEEN '2019-11-05' AND '2019-11-29'
FROM `transaction`;

新列还不可用。将查询包装为子查询的派生表:

select dt.*, vatPrivate + vatGovernment + vatExempt
from
(
    SELECT  SUM(CASE WHEN entryDate BETWEEN '2019-11-05' AND '2019-11-31'
                    THEN vatPrivate END) AS vatPrivate,
        SUM(CASE WHEN entryDate BETWEEN '2019-11-05' AND '2019-11-31'
                    THEN vatGovernment END) AS vatGoverment,
        SUM(CASE WHEN entryDate BETWEEN '2019-11-05' AND '2019-11-31'
                    THEN vatExempt END) AS vatExempt
    FROM `transaction`
) dt
SELECT vatPrivate, vatGovernment, vatZero,
       vatPrivate + vatGovernment + vatZero AS vatTotal
FROM (
    SELECT SUM(vatPrivate) AS vatPrivate,
           SUM(vatGovernment) AS vatGovernment,
           SUM(vatZero) AS vatZero
    FROM transaction gl
    WHERE (gl.entryDate) BETWEEN '2019-11-05' AND '2019-11-29'
) sums

Sql select语法的执行顺序未知,因此不能在同一个select中使用select别名。您必须使用CTE或子查询来执行此操作。对于未来:您应该在问题中标记sql db引擎。

最简单的解决方案就是重复求和表达式

SELECT SUM(vatPrivate) AS vatPrivate,
       SUM(vatGovernment) AS vatGovernment,
       SUM(vatZero) AS vatZero,
       SUM(vatPrivate) + SUM(vatGovernment) + SUM(vatZero) AS vatTotal
FROM transaction gl
WHERE (gl.entryDate) BETWEEN '2019-11-05' AND '2019-11-29'
您可以依靠查询优化程序来发现您重复了它们,而不是计算了两次。如果要确定它们没有重新计算,请使用子查询:

select dt.*, vatPrivate + vatGovernment + vatExempt
from
(
    SELECT  SUM(CASE WHEN entryDate BETWEEN '2019-11-05' AND '2019-11-31'
                    THEN vatPrivate END) AS vatPrivate,
        SUM(CASE WHEN entryDate BETWEEN '2019-11-05' AND '2019-11-31'
                    THEN vatGovernment END) AS vatGoverment,
        SUM(CASE WHEN entryDate BETWEEN '2019-11-05' AND '2019-11-31'
                    THEN vatExempt END) AS vatExempt
    FROM `transaction`
) dt
SELECT vatPrivate, vatGovernment, vatZero,
       vatPrivate + vatGovernment + vatZero AS vatTotal
FROM (
    SELECT SUM(vatPrivate) AS vatPrivate,
           SUM(vatGovernment) AS vatGovernment,
           SUM(vatZero) AS vatZero
    FROM transaction gl
    WHERE (gl.entryDate) BETWEEN '2019-11-05' AND '2019-11-29'
) sums

标记适当的数据库名称。一些样本数据和您预期的输出会有所帮助。这些答案之一解决了您的问题吗?如果没有,你能提供更多的信息来帮助回答这个问题吗?否则,请考虑把答案最好的答案标在上下投票箭头上。看到和