我遇到以下问题。想象一下,我的mySQL表看起来像这样:
id range
1 210-400
2 300-310
3 100-350
我想找到
现在我尝试使用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'”
所以我的问题 - 这是否可能,如何?
答案 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