mysql - 我需要在mysql中创建一个具有动态值范围的查询
问题描述
我有一个表,其中有一列名为“Points”,该列的最小值为 0,最大值为 100.000。我必须对该列的每个范围进行分析,所以我写了一个这样的查询:
select case when Points between 0 and 5000 then '0 - 5000'
when Points between 5001 and 20000 then '50001 - 20000'
when Points > 20000 then '> 20000'
else 0 end RangeP
from Sales
问题是客户希望看到从 0 到 100.000 的每 2.000 个点
如果我使用案例编写查询,查询会变得非常大,所以我想要一种动态获取这个范围的方法。
有可能的?非常感谢你
解决方案
您可以创建一个包含范围及其文本标签的表格,然后加入它,例如
SELECT
s.Points,
COALESCE(r.label, 'range not found') AS range
FROM Sales s
LEFT JOIN
(
SELECT 0 AS start, 2000 AS end, '0 - 2000' AS label UNION ALL
SELECT 2001, 4000, '2001 - 4000' UNION ALL
...
SELECT 98000, 100000, '98000 - 100000'
) r
ON s.Points BETWEEN r.start AND r.end;
我已经内联了范围表,但您可以创建一个正式表(或者可能是一个临时表),然后将上面的子查询替换为仅对该表的引用。
推荐阅读
- excel - 查找在年份变化/范围错误时停止
- c++ - 粗略估计程序执行时间
- java - JaCoCo 不适用于 Mockito 测试用例
- rasa-nlu - Rasa RegexFeaturizer 是基于令牌还是整个句子?
- django - 获取“名称”是无效的关键字参数(使用 graphene-django)
- elasticsearch - 了解弹性搜索中嵌套字段的排序结果
- linux - 如何在 sh 中循环到日期之间的月末日期?
- typescript - 如何画一个圆形的图片 Pixijs
- docker - 在运行的容器内挂载 Lustre 不起作用(已添加所有功能)
- java - 无法从 docker 容器在 Wildfly 服务器 bin 文件夹中创建日志文件夹