2011-10-12 75 views
3

我一直試圖查詢某個產品的增加百分比,這取決於每次運行的實際增加量。因此,例如,我已經表模式下現在按不同比例分組MySQL

product table

,如果我查詢增加的百分比,我會得到這樣的:

SELECT *, (((newPrice - price)/price) * 100) as PERCENTAGE FROM Product 

products with their respective percentage

什麼我試着去獲得是根據計算的增加量將特定範圍內的值分組。因此,對於這個運行是這樣的:

| Range | #COUNT | 
| 0-10% | 3   | 
| 30-40% | 1   | 

多範圍和產品,如果現有

我曾嘗試:

Select *, COUNT(idProduct) AS COUNT FROM Product 
where (((newPrice - price)/price) * 100) BETWEEN 0 AND 10 

這給了我:

enter image description here

但我需要c以可以確定合理的百分比範圍的方式對查詢進行配置(即,不對硬編碼值之間的值進行硬編碼)並將值分組以用於不同的運行。有任何想法嗎?

謝謝!


產品表

CREATE TABLE `product` ( 
    `idproduct` INT NOT NULL ,  
    `description` VARCHAR(45) NULL ,  
    `price` INT NULL ,  
    `newPrice` INT NULL ,  
    PRIMARY KEY (`idproduct`)); 
+0

安裝查詢任何人想要嘗試一下:http://www.sqlize.com/y6pqT7Ys7y – mellamokb

+0

是的,這是一個好主意的時刻.. – Bartzilla

+0

至少在我住的地方,價格上漲被定義爲' PriceChange/OldPrice'而不是'PriceChange/NewPrice' – Andomar

回答

9

你可以group by 10%比例的樂隊:

SELECT floor((newPrice - price)/price * 10) * 10 as LowerBound 
,  floor((newPrice - price)/price * 10) * 10 + 10 as HigherBound 
,  count(*) as Count 
FROM Product 
GROUP BY 
     floor((newPrice - price)/price * 10) 

乘以10,並四捨五入應爲每個10個百分點,其中一組。

+0

+1精美的作品:http://www.sqlize.com/2kiAAnYrbH – mellamokb

+0

真棒回答+1並標記爲回答!我剛編輯公式來計算增加價格。這是我的錯,我寫錯了它應該是問題(newPrice - 價格)/價格..)但真棒!非常感謝!!!! – Bartzilla

1
SELECT 
    r.RangeValue, 
    COUNT(*) AS CountofProducts 
FROM (SELECT 
     CASE WHEN (((newPrice - price)/newPrice) * 100) <= 10 THEN 
      '0-10%' 
     WHEN (((newPrice - price)/newPrice) * 100) <= 20 THEN 
      '10-20%' 
     WHEN (((newPrice - price)/newPrice) * 100) <= 30 THEN 
      '20-30%' 
     WHEN (((newPrice - price)/newPrice) * 100) <= 40 THEN 
      '30-40%' 
     ELSE 
      '40+%' 
     END AS RangeValue 
     FROM Product) r 
GROUP BY r.RangeValue 
+0

我想避免硬編碼範圍。因爲我無法控制它們..我想根據計算出的百分比範圍來管理查詢內容 – Bartzilla

+0

您在每個CASE語句中都有一個額外的'(',並且您需要反駁'Range'字段,因爲它是一個MySql關鍵字:http://www.sqlize.com/hXhD843eU2 – mellamokb

0

其簡單 SELECT COUNT(*)的項目,(((newPrice - 價格)/ newPrice)* 100)的百分比,

IF( ((newPrice - 價格)/ newPrice * 100)> = 0 & &
((newPrice - 價格)/ newPrice * 100)< = 10, 「0 - 10%」, IF( ((newPrice - 價格)/ newPrice * 100)> = 11 & &
((newPrice - price)/ newPrice * 100)< = 30, 「10 - 30%」, 等等.... ) )AS '範圍'

從產品 組通過一系列

基本上,你必須使用嵌套if()語句,並在他們裏面你把範圍。

然後給它一個有意義的別名。然後您可以按別名進行分組。

+0

這是一種比子查詢更快的方式,你可以通過解釋模式來檢查 – Imdad