Нахождение значения MIN () SUBSTRING () - PullRequest
3 голосов
/ 01 февраля 2012

У меня следующая проблема.Представьте, что моя таблица MySQL выглядит следующим образом:

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

Я хочу найти

  1. значение MIN первой части (перед "-") в поле диапазона
  2. значение MAX для второй части (после "-") в поле диапазона

Теперь я попытался выбрать нужные части этого поля с помощью SUBSTRING и затем получить MIN илиМаксимальное значение, подобное этому:

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 ]

3 голосов
/ 01 февраля 2012

Используйте SUBSTRING_INDEX дважды - в функциях MIN и MAX или используйте подзапрос, потому что псевдонимы недоступны в текущем SELECT.

3 голосов
/ 01 февраля 2012

Вам не хватает запятой после 3-й строки (после as 'right_value').

Тем не менее, это, вероятно, еще не полностью решит вашу проблему. +1 за ответ Деварта. Чтобы расширить, вы, вероятно, ищете что-то ближе к этому:

SELECT
  MIN(SUBSTRING_INDEX(`range`, '-', 1)),
  MAX(SUBSTRING_INDEX(`range`, '-', -1))
FROM `table`
1 голос
/ 01 февраля 2012

Как описал 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
...