2016-11-27 83 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

我認爲' *'和'/'具有相同的優先級。 –