如何在指定价格区间划分20个分组统计products表各区间商品数量
SQL 价格区间分组统计实现方案
首先计算等距区间步长:价格总范围是30000USD - 400USD = 29600USD,分成20个等距区间的话,单个区间的步长为 29600 / 20 = 1480 USD,你也可以根据实际需求自定义步长数值。
方案1:全数据库兼容通用写法
不依赖特定数据库函数,可直接在MySQL、PostgreSQL、SQL Server等所有主流数据库运行:
SELECT CONCAT( FLOOR((price - 400) / 1480) * 1480 + 400, ' - ', CASE WHEN FLOOR((price - 400) / 1480) = 19 THEN 30000 ELSE (FLOOR((price - 400) / 1480) + 1) * 1480 + 400 END ) AS price_range, COUNT(*) AS product_count FROM products WHERE price BETWEEN 400 AND 30000 GROUP BY price_range ORDER BY MIN(price);
- 逻辑说明:通过计算价格对应的区间下标,自动生成区间左右端点,特殊处理最后一个区间的右端点,避免边界值超出最大价格30000USD的问题,最终按区间分组统计商品数量。
- 输出格式和你给出的示例完全匹配,结果形式为
价格区间 = 商品数量。
方案2:支持WIDTH_BUCKET函数的数据库简化写法
如果你使用的是MySQL 8.0+、PostgreSQL等支持内置区间划分函数的数据库,可以用更简洁的写法:
SELECT CONCAT( (WIDTH_BUCKET(price, 400, 30000, 20) - 1) * 1480 + 400, ' - ', CASE WHEN WIDTH_BUCKET(price, 400, 30000, 20) = 20 THEN 30000 ELSE WIDTH_BUCKET(price, 400, 30000, 20) * 1480 + 400 END ) AS price_range, COUNT(*) AS product_count FROM products WHERE price BETWEEN 400 AND 30000 GROUP BY price_range ORDER BY price_range;
内容的提问来源于stack exchange,提问作者Abu Sayed
相关产品推荐
相关产品推荐

