MySQL:在选择算术-未知字段中使用别名
以下是我的选择:MySQL:在选择算术-未知字段中使用别名,mysql,sql,Mysql,Sql,以下是我的选择: SELECT SUM(t.amount + c.designFeeValue) as cashReceived, ROUND(SUM(i.value) * (m.percentOurs / 100)) as adValue, m.managementFee as managementFee, m.productionCost as productionCost, 5 as emailAddress, ( ( SELECT valu
SELECT
SUM(t.amount + c.designFeeValue) as cashReceived,
ROUND(SUM(i.value) * (m.percentOurs / 100)) as adValue,
m.managementFee as managementFee,
m.productionCost as productionCost,
5 as emailAddress,
(
(
SELECT value
FROM commission_transactions
WHERE isDebit IS
TRUE
) -
(
SELECT value
FROM commission_transactions
WHERE isDebit IS
FALSE
)
) as miscExpenses,
(managementFee + productionCost + emailAddress + miscExpenses) as totalExpenses
这是因为下面一行,我加了一些别名
(managementFee + productionCost + emailAddress + miscExpenses) as totalExpenses
别名是未知字段
有没有一种方法可以保留此算法的别名,或者我需要重新进行生成每个别名的所有数学运算以计算totalExpenses?这似乎是一种非常丑陋的方式
更新:
根据您的建议,我现在使用的是派生表
SELECT
cashReceived,
adValue,
managementFee,
productionCost,
emailAddress,
miscExpenses,
adValue + managementFee + productionCost + emailAddress + miscExpenses as totalExpenses
FROM (
SELECT
SUM(t.amount + c.designFeeValue) as cashReceived,
ROUND(SUM(i.value) * (m.percentOurs / 100)) as adValue,
m.managementFee as managementFee,
m.productionCost as productionCost,
5 as emailAddress,
(
(
SELECT value
FROM commission_transactions
WHERE isDebit IS TRUE
) -
(
SELECT value
FROM commission_transactions
WHERE isDebit IS FALSE
)
) as miscExpenses
FROM magazines m
JOIN insertions i ON i.magazineId = m.id
JOIN transactions t ON t.insertionId = i.id
JOIN contracts c ON i.contractId = c.id
JOIN commission_transactions ct ON m.id = ct.magazineId
WHERE m.id = 17
AND t.isChargedBack IS FALSE
AND t.`timestamp` >= '2013-08-01 00:00:00'
AND t.`timestamp` < '2013-09-01 00:00:00'
AND ct.createdDate >= '2013-08-01 00:00:00'
AND ct.createdDate < '2013-09-01 00:00:00'
) sub;
别名在字段列表中不可重复使用,例如:
mysql> select 5 as five, five + 1 as six;
ERROR 1054 (42S22): Unknown column 'five' in 'field list'
您必须用另一个包装器包装select,然后在该包装器中进行别名计算,例如
select *, managementFee + productionCost + emailAddress + miscExpenses) as totalExpenses
FROM (
... your above query here ...
)
尝试写出您的TableAlias.yourColumnAlias,如果这不起作用,请重新计算。类似于miscexpenses.managementFree+miscexpenses.ProductionCost这个分号:“2013-09-01 00:00:00”;在你的各种约会结束时,你不应该在那里;是语句终止符,但此时您尚未完成查询,至少有一个问题尚未解决。还有一个问题。。。奇怪的是,cashceived、adValue和totalExpenses都是空的。这些字段在sub中是通过算术生成的。如何访问外部SELECT中的这些字段?基本上,外部/包装器查询将内部查询视为一个表。只要外部使用的别名/字段名与内部查询使用的别名/字段名完全相同,您就应该返回数据。当我使用*或sub.cashReceived时会发生同样的情况。如果外部查询中的别名/字段名为null,则内部查询中的别名/字段名也会返回null。