2017-09-13 15 views
1

我有一個產品數據庫,我希望能夠選擇8個定價折扣組中每個產品的計數。MySql試圖選擇分組方式,計算範圍爲

查詢結果將爲兩列,一列爲定價折扣組,另一列爲該組內的產品數量。

定價折扣是在此基礎上計算:

(100-pSalesPrice/pPrice)

這將導致在一個有理數0-100

這個SELECT語句之間:

SELECT (100-100*pSalesPrice/pPrice) as pDisc, count(*) FROM ds_products where 1 GROUP BY (100-100*pSalesPrice/pPrice) 

結果於:

0.000000 44 
0.111114 1 
1.033332 3 
3.128208 3 
3.142853 2 

... ECT對線

我想什麼了數百是由只有8範圍分組,這樣的結果:

15 12 
25 84 
35 72 
45 11 
55 102 
65 36 
75 12 
76 3 

其中每個範圍是:

15 = 0-15 
25 = 16-25 
35 = 26-35 
45 = 36-45 
55 = 46-55 
65 = 56-65 
75 = 66-75 
76 = 76-100 

目前,我的計劃是一個新的字段添加到我叫pDiscountGroup產品數據庫和更新這些對每個產品......但我不想多添加到我的產品數據庫,如果我沒有。

是否有一個漂亮的MySQL查詢可以完成我想要的?

回答

0

你可以使用的情況下,當爲構建你所需要的範圍

SELECT 
    case when (100-100*pSalesPrice/pPrice) <= 15 then 15 
     when (100-100*pSalesPrice/pPrice) > 15 and (100-100*pSalesPrice/pPrice) <= 25 
                then 25 
     when (100-100*pSalesPrice/pPrice) > 25 and (100-100*pSalesPrice/pPrice) <= 35 
                then 35 
       .... 
       .... 
     when (100-100*pSalesPrice/pPrice) > 75 then 100 
     end as pDisc 
    , count(*) 
    FROM ds_products 
    GROUP BY pDisc 
+0

我喜歡這裏的想法,它似乎工作 - 但它給了我一個非常奇怪的服務器錯誤,我從來沒有在phpMyAdmin之前見過。 –

+0

這對我有用,但我不喜歡服務器錯誤。這不是一個阻止我使用查詢的錯誤,但它確實提到錯誤報告給虛擬主機....(Bluehost)。 –

+0

工作! CASE ... END需要在() –

0

你可以添加例如另一個錶帶有3列的groupspriceGroup, min, max(或相似的名稱)。在此表喲添加範圍,如在你的問題中定義:

priceGroup min max 
15   0 15 
25   16 25 
35   26 35 
45   36 45 
55   46 55 
65   56 65 
75   66 75 
76   76 100 

現在你可以做一個加入到這個表

SELECT g.priceGroup, count(*) 
FROM ds_products p 
    LEFT JOIN groups g ON 
     (100-100*pSalesPrice/pPrice BETWEEN min AND max) 
GROUP BY g.priceGroup 

這個方案的好處是,它是可能的重新排列組,甚至存儲組的名稱,...