我需要在mysql中使用动态值范围创建查询

时间:2019-05-09 13:46:26

标签: 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点

如果我使用案例编写查询,查询将变得非常大,因此我想一种动态获取此范围的方法。

有可能吗?非常感谢

1 个答案:

答案 0 :(得分:0)

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

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;

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