MYSQL中的数学查询两个字段返回3个字段?

时间:2011-11-11 20:00:33

标签: php mysql

我正在试图弄清楚如何运行类似这样的查询:

$query = "SELECT RegPrice, OnSalePrice

Math.abs(Math.max(100 - (OnSalePrice) / (RegPrice) * 100)) AS DiscountIS

FROM Products";

所以需要RegPrice& OnSalePrice并给我折扣的百分比,并将其作为DiscountIS以及其他2个值返回。

查询TWO&回来三。

任何想法?谢谢!

1 个答案:

答案 0 :(得分:1)

您编写的查询在语法上是正确的,除非您在OnSalePrice之后缺少逗号,并且不应将Math.放在abs或max之前。你也应该用分号结束它,但这通常不重要。因此,正确的查询将是:

$query = "SELECT RegPrice, OnSalePrice, ABS(MAX(100 - (OnSalePrice) / (RegPrice) * 100)) AS DiscountIS FROM Products;";

(我也将ABS和MAX大写,但这只是一种风格选择.SQL在所有命令和函数中忽略大小写。)

但是,此查询存在问题,即MAX是一个聚合函数,因此它返回整个表的最大值。因此,当使用聚合函数(如MAX)时,您也无法选择其他属性。因此,如果您希望每个项目都显示其RegPrice,OnSalePrice和折扣,那么执行此操作的正确方法是简单地省略MAX。 (我怀疑这是你想要做的,因为Math.max函数只给出了它的最大参数。但是我不确定,因为在这种情况下你只给了它一个参数。)

$query = "SELECT RegPrice, OnSalePrice, ABS(100 - (OnSalePrice) / (RegPrice) * 100) AS DiscountIS FROM Products;";

如果您真的想知道具有最大折扣的常规价格,促销价格和折扣,那么这是一个稍微复杂的查询,必须通过在SELECT中进行SELECT来处理。

$query = "SELECT RegPrice, OnSalePrice, ABS(100 - (OnSalePrice) / (RegPrice) * 100) AS DiscountIS FROM Products WHERE ABS(100-OnSalePrice/RegPrice*100)=(SELECT ABS(MAX(100-OnSalePrice/RegPrice*100)));";

应该注意的是,在任何版本中,如果OnSalePrice大于RegPrice,那么这仍将显示为折扣,如果RegPrice为零,则会产生除零。