我有一个产品数据库,我希望能够选择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查询?
答案 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
此解决方案的好处是,可以重新排列组,甚至可以存储组的名称,...