MySql尝试选择分组依据,计算范围为

时间:2017-09-13 18:13:46

标签: php mysql

我有一个产品数据库,我希望能够选择8个定价折扣组中每个产品的数量。

查询结果将是两列,一列包含定价折扣组,另一列包含该组中的产品数。

定价折扣基于以下计算:

(100-pSalesPrice / pPrice)

这将导致0-100

之间的有理数

此选择声明:

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

......等100行

我喜欢的是仅按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查询?

2 个答案:

答案 0 :(得分: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

答案 1 :(得分:0)

您可以添加其他表格,例如groups有3列:priceGroup, 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

此解决方案的好处是,可以重新排列组,甚至可以存储组的名称,...