Mysql 我想在一个select查询中获得3个或更多列的总数
查询示例: 我创建了一个查询,在一个月内得到总数,我想添加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
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
标记适当的数据库名称。一些样本数据和您预期的输出会有所帮助。这些答案之一解决了您的问题吗?如果没有,你能提供更多的信息来帮助回答这个问题吗?否则,请考虑把答案最好的答案标在上下投票箭头上。看到和