我一直在尝试查询按特定范围分组的产品的增加百分比,具体取决于每次运行的实际增长。例如,我有以下表格模式
现在,如果我查询增加百分比,我会得到类似的东西:
SELECT *, (((newPrice - price)/price) * 100 ) as PERCENTAGE FROM Product
我想要获得的是根据计算的增量将值分组到特定范围内。所以对于这样的运行:
| Range | #COUNT |
| 0-10% | 3 |
| 30-40% | 1 |
以及更多范围和产品(如果存在)
我试过了:
Select *, COUNT(idProduct) AS COUNT FROM Product
where (((newPrice - price)/price) * 100 ) BETWEEN 0 AND 10
给了我:
但是我需要以一种可以确定合理百分比范围的方式配置查询(即,不对硬件编码 0 和 10 之间的值)并对值进行分组在那里进行不同的运行。有任何想法吗?
谢谢!
产品表
CREATE TABLE `product` (
`idproduct` INT NOT NULL ,
`description` VARCHAR(45) NULL ,
`price` INT NULL ,
`newPrice` INT NULL ,
PRIMARY KEY (`idproduct`) );
答案 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()语句,并在其中放置范围。
然后给它一个有意义的别名。然后,您可以按别名分组。