如何从两行中选择最小值?

时间:2013-12-11 22:32:21

标签: mysql minimum

如何从两行中选择最小值?我试过这个:

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不存在。

2 个答案:

答案 0 :(得分:2)

首先,你实际上使用了错误的功能。如果您需要两个提供值中的最小值,请使用LEAST()函数。

MIN()函数是aggregate function。它返回多个记录的最低值。

SELECT MIN(`PRICE1`) AS MIN_PRICE1
FROM `TABLE`

只返回一条记录:

MIN_PRICE1
----------
5.89

因为这是您表格中PRICE1的最低值。

但为什么'FUNCTION MIN不存在'错误?

但是,这不是触发错误的原因。问题是函数名和左括号之间有一个空格:

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`