任何引用MySQL的方法;作为「;查询中的值?
在下面的查询中,我汇总了给定范围内所有销售的所有销售项目。在这个总结中包括“sumOfCost”和“sumOfPrice”,我也想要“sumOfPrice”。问题是,因为它们只是“as”变量,我不知道如何引用它们,我的尝试“…Blah as Blah,sumOfPrice-sumofcast=sumOfProfit…”很遗憾没有成功 我的问题是:任何引用MySQL的方法;作为「;查询中的值?,mysql,sql,join,Mysql,Sql,Join,在下面的查询中,我汇总了给定范围内所有销售的所有销售项目。在这个总结中包括“sumOfCost”和“sumOfPrice”,我也想要“sumOfPrice”。问题是,因为它们只是“as”变量,我不知道如何引用它们,我的尝试“…Blah as Blah,sumOfPrice-sumofcast=sumOfProfit…”很遗憾没有成功 我的问题是: SELECT Sales.SaleID, Sales.StaffID, Sales.CustomerID,
SELECT Sales.SaleID,
Sales.StaffID,
Sales.CustomerID,
Sales.Timestamp,
Sales.Refunded,
Sales.PaymentType,
Staff.Forename AS staffForename,
Staff.Surname AS staffSurname,
(
SELECT GROUP_CONCAT(Quantity, ' x ', Name)
FROM SaleItems
WHERE SaleItems.SaleID = Sales.SaleID
) AS itemList,
(
SELECT sum(Cost*Quantity)
FROM SaleItems
WHERE SaleItems.SaleID = Sales.SaleID
) AS sumOfCost,
(
SELECT sum(Price*Quantity)
FROM SaleItems
WHERE SaleItems.SaleID = Sales.SaleID
) AS sumOfPrice
FROM Sales
INNER JOIN Staff
ON Sales.StaffID = Staff.StaffID
WHERE Sales.Deleted = '0'
ORDER BY Timestamp DESC
LIMIT 0, 15
对于查询的长度表示歉意,我以前一直在努力优化它,但现在我只想解决这个问题
提前感谢:)解决此问题的另一种方法是使用子查询包装整个查询
顺便说一下,它们被称为
别名
ALIAS
不能用于定义它们的同一级别上的计算,原因是服务器在SELECT
子句之前执行FROM
子句。ALIAS
位于SELECT
子句上,下面是完整的SQL操作顺序:
- FROM子句
- WHERE子句
- 分组依据子句
- 有从句
- SELECT子句
- 按条款订货
JOIN
而不是子查询
更新1
SELECT Sales.SaleID,
Sales.StaffID,
Sales.CustomerID,
Sales.Timestamp,
Sales.Refunded,
Sales.PaymentType,
Staff.Forename AS staffForename,
Staff.Surname AS staffSurname,
COALESCE(a.itemList, '') itemList,
COALESCE(b.sumOfCost, 0) sumOfCost,
COALESCE(c.sumOfPrice, 0) sumOfPrice,
COALESCE(b.sumOfCost, 0) - COALESCE(c.sumOfPrice, 0) AS sumOfProfit
FROM Sales
INNER JOIN Staff
ON Sales.StaffID = Staff.StaffID
LEFT JOIN
(
SELECT SaleID, GROUP_CONCAT(Quantity, ' x ', Name) itemList
FROM SaleItems
GROUP BY SaleID
) a ON a.SaleID = Sales.SaleID
LEFT JOIN
(
SELECT SaleID, sum(Cost*Quantity) sumOfCost
FROM SaleItems
GROUP BY SaleID
) b ON b.SaleID = Sales.SaleID
LEFT JOIN
(
SELECT SaleID, sum(Price*Quantity) sumOfPrice
FROM SaleItems
GROUP BY SaleID
) c ON c.SaleID = Sales.SaleID
WHERE Sales.Deleted = '0'
ORDER BY Timestamp DESC
LIMIT 0, 15
更新2
SELECT Sales.SaleID,
Sales.StaffID,
Sales.CustomerID,
Sales.TIMESTAMP,
Sales.Refunded,
Sales.PaymentType,
Staff.Forename AS staffForename,
Staff.Surname AS staffSurname,
COALESCE(a.itemList, '') itemList,
COALESCE(a.sumOfCost, 0) sumOfCost,
COALESCE(a.sumOfPrice, 0) sumOfPrice,
COALESCE(a.sumOfCost, 0) - COALESCE(a.sumOfPrice, 0) AS sumOfProfit
FROM Sales
INNER JOIN Staff
ON Sales.StaffID = Staff.StaffID
LEFT JOIN
(
SELECT SaleID,
GROUP_CONCAT(Quantity, ' x ', Name) itemList,
SUM(Cost*Quantity) sumOfCost,
SUM(Price*Quantity) sumOfPrice
FROM SaleItems
GROUP BY SaleID
) a ON a.SaleID = Sales.SaleID
WHERE Sales.Deleted = '0'
ORDER BY TIMESTAMP DESC
LIMIT 0, 15
你为什么需要它?如果您想创建条件,可以使用HAVING子句[而不是WHERE],我相信您可以在中使用它们ORDER@mkk他想根据subquerys.istead计算结果,使用依赖子查询需要更多时间,使用连接需要快速编辑,不知道为什么,但有人更改了我的查询?@Redgie以使查询更清晰这可能是最好的选择。感谢您解释为什么原始概念不起作用:)这很烦人,我必须重新构造查询,请注意…@Redgie我将发布此的
JOIN
ed版本,我认为该版本性能更好。@Redgie查看我的更新,您不需要用子查询包装整个查询,您现在可以直接使用columsn。非常感谢,这太棒了:)看起来结果确实是一样的,再次感谢!:)
SELECT Sales.SaleID,
Sales.StaffID,
Sales.CustomerID,
Sales.TIMESTAMP,
Sales.Refunded,
Sales.PaymentType,
Staff.Forename AS staffForename,
Staff.Surname AS staffSurname,
COALESCE(a.itemList, '') itemList,
COALESCE(a.sumOfCost, 0) sumOfCost,
COALESCE(a.sumOfPrice, 0) sumOfPrice,
COALESCE(a.sumOfCost, 0) - COALESCE(a.sumOfPrice, 0) AS sumOfProfit
FROM Sales
INNER JOIN Staff
ON Sales.StaffID = Staff.StaffID
LEFT JOIN
(
SELECT SaleID,
GROUP_CONCAT(Quantity, ' x ', Name) itemList,
SUM(Cost*Quantity) sumOfCost,
SUM(Price*Quantity) sumOfPrice
FROM SaleItems
GROUP BY SaleID
) a ON a.SaleID = Sales.SaleID
WHERE Sales.Deleted = '0'
ORDER BY TIMESTAMP DESC
LIMIT 0, 15