【问题标题】:MySql trying to select Group By with calculation rangeMySql 尝试选择具有计算范围的 Group By
【发布时间】:2017-09-14 02:46:14
【问题描述】:

我有一个产品数据库,我希望能够选择 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 查询可以完成我想要的?

【问题讨论】:

    标签: php mysql


    【解决方案1】:

    您可以在构建所需范围时使用案例

    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
    

    【讨论】:

    • 我喜欢这里的想法,而且它似乎有效 - 但是它给了我一个非常奇怪的服务器错误,这是我以前在 phpMyAdmin 中从未见过的。
    • 这对我有用,但我不喜欢服务器错误。这不是阻止我使用查询的错误,但它确实提到了将错误报告给 webhost.... (Bluehost)。
    • 成功了! CASE ... END 需要在 ()
    【解决方案2】:

    您可以添加另一个表格,例如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
    

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-06-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多