首页 > 解决方案 > 我需要在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 个点

如果我使用案例编写查询,查询会变得非常大,所以我想要一种动态获取这个范围的方法。

有可能的?非常感谢你

标签: mysql

解决方案


您可以创建一个包含范围及其文本标签的表格,然后加入它,例如

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;

我已经内联了范围表,但您可以创建一个正式表(或者可能是一个临时表),然后将上面的子查询替换为仅对该表的引用。


推荐阅读