在SQL上使用MAX()获取正确的值

时间:2017-12-13 17:43:13

标签: sql sql-server

从下面的表格中获取MAX()值。 这是表格的样子

LEVEL  ACCOUNTNAME
0.11      namea
1.25      namea
14.55     namea
3.52      namea

她是我使用的代码:

SELECT 
MAX(LEVEL) AS HIGHESTLEVEL, ACCOUNTNAME
FROM TABLE
GROUP BY ACCOUNTNAME

然而我的回答是

LEVEL    ACCOUNTNAME
3.52        namea

我应该得到14.55而不是3.52。有谁知道发生了什么事?

2 个答案:

答案 0 :(得分:3)

您的等级字段是一个字符串。在SQL 2012 +中尝试这个:

SELECT MAX(TRY_CONVERT(FLOAT, Level)) AS HIGHESTLEVEL, ACCOUNTNAME
FROM TABLE
GROUP BY ACCOUNTNAME

对于给定的LEVEL值没有任何有效数值的任何ACCOUNTNAME,这将返回NULL。

答案 1 :(得分:1)

以下使用TOPDESC的方式:

SELECT TOP 1 *
  FROM TABLE
ORDER BY CAST([Level] as decimal(16,2)) DESC

使用MAXgroup by的另一种方式:

SELECT MAX(CAST([Level] as decimal(16,2))) AS [Level]
      ,AccountName
  FROM TABLE
GROUP BY AccountName

或者,您可以将[Level]的数据类型更改为decimal或float(它可能应该是,而不是varchar),并且您的原始查询将起作用。

相关问题