查找SUBSTRING()的MIN()值

时间:2012-02-01 13:55:38

标签: mysql max min

我遇到以下问题。想象一下,我的mySQL表看起来像这样:

id   range
1    210-400
2    300-310
3    100-350

我想找到

  1. 范围字段
  2. 中第一部分的MIN值(在“ - ”之前)
  3. 范围字段
  4. 中第二部分的MAX值(在“ - ”之后)

    现在我尝试使用SUBSTRING选择该字段所需的部分,然后获取MIN或MAX值,如下所示:

    SELECT
      SUBSTRING_INDEX(`range`,'-',1) as `left_value`,
      SUBSTRING_INDEX(`range`,'-',-1) as `right_value`,
      MIN(`left_value`),
      MAX(`right_value`)
    FROM `table`
    

    但我只是在'字段列表'中得到“#1054 - 未知列'left_value'”

    所以我的问题 - 这是否可能如何

3 个答案:

答案 0 :(得分:3)

您在第3行(as 'right_value'之后)后遗漏了逗号。

但是,这可能仍然无法完全解决您的问题。 Devart回答+1。要扩展,你可能正在寻找更接近这个的东西:

SELECT
  MIN(SUBSTRING_INDEX(`range`, '-', 1)),
  MAX(SUBSTRING_INDEX(`range`, '-', -1))
FROM `table`

答案 1 :(得分:3)

使用SUBSTRING_INDEX两次 - 在MIN函数和MAX函数中,或使用子查询,因为在当前SELECT中无法访问别名。

答案 2 :(得分:1)

正如Devart所描述的那样,你不能使用"别名"列名,但使用MySQL,您可以使用SQL变量...可能会调整为类似

SELECT
      @leftValue := SUBSTRING_INDEX(`range`,'-',1) as ignore1,
      @rightValue := SUBSTRING_INDEX(`range`,'-',-1) as ignore2,
      MIN(@leftValue) as LowRange,
      MAX(@rightValue ) as HighRange
   FROM 
      `table`,
      ( select @leftValue := '', @rightValue := '' ) SqlVars