我正在试图弄清楚如何运行类似这样的查询:
$query = "SELECT RegPrice, OnSalePrice
Math.abs(Math.max(100 - (OnSalePrice) / (RegPrice) * 100)) AS DiscountIS
FROM Products";
所以需要RegPrice& OnSalePrice并给我折扣的百分比,并将其作为DiscountIS以及其他2个值返回。
查询TWO&回来三。
任何想法?谢谢!
答案 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为零,则会产生除零。