2014-09-01 51 views
-3

我想从表中获取最大值,但它没有给我正确的值(最大值)。没有得到预期的结果从sql查询找到最大值

我使用这个查询来获取价值

SELECT MAX(column_name1) FROM table_name WHERE column_name2 = 'some_value' 

列名的数据类型为VARCHAR。这是显示这个意外结果的问题吗?

+1

结果将始终是相同的值,因为你定义一个WHERE' '它的条件! – 2014-09-01 13:26:55

+2

显示一些数据!如果将**数字**存储在'varchar'列中,​​您可能会得到意想不到的结果,因为MAX()将应用于**字母**排序 - 不是任何数值..... – 2014-09-01 13:27:25

+0

实际上有更多记录的值为“some_value”,我想从这些记录中只获取其他列的最大值。我在我的问题上做了一个更正,你现在就会知道。这两列是不同的。 – 2014-09-01 13:38:17

回答

0

嗯。该值将始终为'some_value'。如果你想max(),删除where条款:

SELECT MAX(column_name) 
FROM table_name; 

的数据类型无关的问题。

那么你可以使用:

SELECT MAX(salary) 
FROM table_name 
WHERE name = 'John'; 

编辑:

如果您存储数字和日期作为字符串,而不是使用本地SQL类型,那么你就一定有问题。 MySQL可以很容易地从字符串转换为数字,所以你可以试试这个:

SELECT MAX(salary + 0) 
FROM table_name 
WHERE name = 'John'; 

但是真正的解决方案是修复数据类型。

+0

谢谢Gordon Linoff,但我想从some_vale中获取最大值。例如,假设有四个记录的名称=“John”(这里是some_value)。每个人都有一定的薪水。所以我想只从这四条记录中获得最大薪水值。 – 2014-09-01 13:32:11

+0

我也做过同样的事情... – 2014-09-01 13:42:42

+0

是薪水varchar? – Lennart 2014-09-01 13:42:52

0

我认为这是由于数据类型。所以请将数据类型更改为int或float并尝试一次。

0

MAX()函数是用来在整数值要被施加,而不是为VARCHAR

+0

绝对不是这样。 – 2014-09-01 15:20:19

+0

你能举几个例子吗? – 2014-09-01 15:33:15

+0

http://dev.mysql.com/doc/refman/5.7/en/group-by-functions.html#function_max – 2014-09-01 15:53:48

0

我试图在VARCHAR浇铸成int和现在其工作。我改变了这样的查询 -

SELECT MAX(CAST(column_name1为INT))FROM table_name的WHERE column_name2 = 'SOME_VALUE'