分组与差异百分比MySQL

时间:2011-10-12 19:19:45

标签: mysql sql

我一直在尝试查询按特定范围分组的产品的增加百分比,具体取决于每次运行的实际增长。例如,我有以下表格模式

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

但是我需要以一种可以确定合理百分比范围的方式配置查询(即,不对硬件编码 0 10 之间的值)并对值进行分组在那里进行不同的运行。有任何想法吗?

谢谢!


产品表

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

3 个答案:

答案 0 :(得分: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个百分点创建一个组。

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

答案 2 :(得分:0)

简单 SELECT count(*)as items,(((newPrice - price)/ newPrice)* 100)as PERCENTAGE,

IF(      ((newPrice - price)/ newPrice * 100)&gt; = 0&amp;&amp;
     ((newPrice - price)/ newPrice * 100)&lt; = 10,      “0 - 10%”,      IF(          ((newPrice - price)/ newPrice * 100)&gt; = 11&amp;&amp;
         ((newPrice - price)/ newPrice * 100)&lt; = 30,          “10 - 30%”,          等......      )   ) AS '范围'

FROM Product 按范围分组

基本上,您必须使用嵌套的if()语句,并在其中放置范围。

然后给它一个有意义的别名。然后,您可以按别名分组。