Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/59.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql在多个范围内获取最大值_Mysql - Fatal编程技术网

Mysql在多个范围内获取最大值

Mysql在多个范围内获取最大值,mysql,Mysql,这个问题是关于mysql的。我想得到几组最小值和最大值中的最大值。没有定义组列,“组”基于我定义的范围。我认为通过一个例子可以更好地解释这一点。我希望将以下一组查询合并为一个查询: select max(value) from tablename where value between 5000 and 5499; select max(value) from tablename where value between 7500 and 7999; select max(value) from

这个问题是关于mysql的。我想得到几组最小值和最大值中的最大值。没有定义组列,“组”基于我定义的范围。我认为通过一个例子可以更好地解释这一点。我希望将以下一组查询合并为一个查询:

select max(value) from tablename where value between 5000 and 5499;
select max(value) from tablename where value between 7500 and 7999;
select max(value) from tablename where value between 7000 and 7499;
select max(value) from tablename where value between 6500 and 6999;
select max(value) from tablename where value between 6000 and 6499;
select max(value) from tablename where value between 5500 and 5999;
select max(value) from tablename where value between 8001 and 8998;
所以我可以得到每个范围的最大值列表。我在任何问题上都没有发现类似的情况

非常感谢

请尝试:

select max(case when value between 5000 and 5499 then value else 0 end) as max_5000_5499,
       max(case when value between 7500 and 7999 then value else 0 end) as max_7500_7999
from tablename 
  SELECT MAX(value)
    FROM tablename
   WHERE value BETWEEN 5000 AND 8998
GROUP BY FLOOR(value / 500)

我要做的是使用如下查询:

SELECT
  range1, range2, max(value)
FROM
  (SELECT 5000 AS range1, 5499 AS range2
   UNION ALL SELECT 7500, 7999
   UNION ALL SELECT 7000, 7499
   UNION ALL SELECT 6500, 6999
   UNION ALL SELECT 6000, 6499
   UNION ALL SELECT 5500, 5999
   UNION ALL SELECT 8001, 8998
  ) AS ranges
  LEFT JOIN tablename ON value BETWEEN range1 AND range2
GROUP BY
  range1, range2

当然,如果范围与给定的范围相似,您可以使用公式计算范围,但在这里您可以自由定义任何您想要的范围。您可能还更喜欢使用带有适当索引的“范围”表,以获得更好的性能。

您好,我认为您的解决方案更适合我的情况。但我只得到一个结果,而我期望每个范围都有一个结果。如果我只执行“选择并集”部分,它将返回所有范围,但它不会同时工作。@Danielo515抱歉,我忘记了分组依据。。。请看我更新的答案,现在应该可以了,现在它工作得很好!非常感谢你。这与我目前的MySQL技能显然相去甚远。现在我得花点时间去理解它。许多人认为,这种解决方案是优雅的,它依赖于一个事实,即范围是由一个固定的值间隔。有用,但不适合我的情况。Thanks@Danielo515您可以将其用于相等范围,并与非标准范围合并。