如何从两行中选择最小值?我试过这个:
SELECT `DATE`, `PRICE1`, `PRICE2`, MIN (`PRICE1`, `PRICE2`) AS MINIMUM_OF_P1P2
FROM `TABLE`
我想得到像这样的结果
DATE PRICE1 PRICE2 MINIMUM_OF_P1P2
-------------------------------------------
2013-07-08 5.96 5.79 X.XX <-- 5.79 expected
2013-07-09 5.89 6.04 X.XX <-- 5.89 expected
2013-07-10 6.03 5.97 X.XX <-- 5.97 expected
2013-07-11 6.08 6.10 X.XX <-- 6.08 expected
2013-07-12 6.13 5.97 X.XX <-- 5.97 expected
2013-07-15 6.15 6.25 X.XX <-- 6.15 expected
2013-07-16 6.33 6.44 X.XX <-- 6.33 expected
2013-07-17 6.47 6.35 X.XX <-- 6.35 expected
但我收到错误:FUNCTION MIN不存在。
答案 0 :(得分:2)
首先,你实际上使用了错误的功能。如果您需要两个提供值中的最小值,请使用LEAST()
函数。
MIN()
函数是aggregate function。它返回多个记录的最低值。
SELECT MIN(`PRICE1`) AS MIN_PRICE1
FROM `TABLE`
只返回一条记录:
MIN_PRICE1
----------
5.89
因为这是您表格中PRICE1
的最低值。
但是,这不是触发错误的原因。问题是函数名和左括号之间有一个空格:
MIN (`PRICE1`, `PRICE2`)
来自MySQL manual:
注意强>
默认情况下,函数名称和后面的括号之间不能有空格。这有助于MySQL解析器区分函数调用和对恰好与函数同名的表或列的引用。但是,允许使用函数参数周围的空格。
换句话说,MIN
和(
之间的空格导致MySQL无法正确识别MIN
,并抛出错误消息。
只需删除函数名称和左括号(
之间的空格。
SELECT `DATE`, `PRICE1`, `PRICE2`, LEAST(`PRICE1`, `PRICE2`) AS MINIMUM_OF_P1P2
FROM `TABLE`
或者,你可以告诉MySQL你想在函数名和左括号as described here之间使用空格。
如果您习惯于括号前面的空格,并且您希望解释器在报告失败之前做出一些额外的努力,您可以始终使用sql模式向服务器通知您的首选项。使用选项--sql-mode = IGNORE_SPACE启动服务器,或更改运行时:
set sql_mode='IGNORE_SPACE'; # or if you have the SUPER privilege: set global sql_mode='IGNORE_SPACE'; select version(), AES_DECRYPT (AES_ENCRYPT('abc','y'),'y'); +----------------+------------------------------------------+ | version() | AES_DECRYPT (AES_ENCRYPT('abc','y'),'y') | +----------------+------------------------------------------+ | 5.0.17-max-log | abc | +----------------+------------------------------------------+
就个人而言,我会删除空格,因此您的代码可以在所有环境中使用。
答案 1 :(得分:1)
使用LEAST()
SELECT `DATE`,
`PRICE1`,
`PRICE2`,
least(`PRICE1`, `PRICE2`) AS MINIMUM_OF_P1P2
FROM `TABLE`