2016-11-27 111 views
0

我想获得总百分比关闭,只返回匹配> + 80。然而,这并不返回任何结果不返回任何东西:选择使用HAVING子句

SELECT * FROM products WHERE Available=1 AND Merchant='Amazon' HAVING (LowestUsedPrice - LowestNewPrice)/LowestNewPrice * 100 >= ? 

我使用HAVING是否正确?

+0

你的主要问题是你的百分比公式是错误的。检查我的答案 – phobia82

回答

1

HAVING指定为一组或SELECT语句中使用的聚合函数的搜索条件。

HAVING在聚合阶段之后应用,如果要过滤聚合结果,则必须使用它。

您的查询是错误的。 你可以做的是只在where子句中进行调节。

SELECT * 
FROM products 
WHERE Available=1 
AND Merchant='Amazon' 
AND (LowestUsedPrice - LowestNewPrice)/LowestNewPrice * 100 >= ? 
+0

我试过了,但它不会返回任何东西。这不需要比较吗? ''(LowestUsedPrice - LowestNewPrice)/ LowestNewPrice * 100> =?' –

+0

你对'?'的理解是什么?你必须有一些操作数在那里你想与之比较 – FallAndLearn

+0

对不起,'?'是一个plceholder对于一个PHP PDO操作,在这种情况下,'?'是== 80 8 –

1

根据我的理解,您要使用having来过滤,而您可能只使用where条件。

关于返回结果,您的查询将产生语法错误。如果您按照以下方式使用并且没有得到任何结果,那么显然这是因为条件和数据。在这种情况下,如果你提供数据,你可能会得到一些帮助。

SELECT * FROM products 
WHERE Available=1 
AND Merchant='Amazon' 
AND (LowestUsedPrice - LowestNewPrice)/LowestNewPrice * 100 >= ? 
+0

检查http://sqlfiddle.com/#!9/703fb0/2并解释为什么该sql语句没有工作组通过 – Damith

+0

它不会在sql server中工作。虽然他标记了mysql&sql。 – Esty

+0

我想说的是你的发言小组是由必须是有不正确的 – Damith

0
SELECT *, (LowestUsedPrice - LowestNewPrice)/LowestNewPrice * 100 as percentage FROM products WHERE Available=1 AND Merchant='Amazon' HAVING percentage >= ? 
+0

百分比来自这个查询? –

+0

它在那里在选择列作为计算列 – Damith

0

你的主要问题是,你个公式是错误的。使用

((LowestUsedPrice - LowestNewPrice)/LowestNewPrice) * 100 

(LowestUsedPrice - LowestNewPrice) * 100/LowestNewPrice 

你使用会做这样的事情

(20 - 8)/15 * 100 

12/1500 = 0.008 

的方式,你需要

1200/15 = 80 

此修复程序添加到其他的解决方案回答

+0

我认为' *'和'/'具有相同的优先级。 –