从下面的表格中获取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。有谁知道发生了什么事?
答案 0 :(得分:3)
您的等级字段是一个字符串。在SQL 2012 +中尝试这个:
SELECT MAX(TRY_CONVERT(FLOAT, Level)) AS HIGHESTLEVEL, ACCOUNTNAME
FROM TABLE
GROUP BY ACCOUNTNAME
对于给定的LEVEL值没有任何有效数值的任何ACCOUNTNAME,这将返回NULL。
答案 1 :(得分:1)
以下使用TOP
和DESC
的方式:
SELECT TOP 1 *
FROM TABLE
ORDER BY CAST([Level] as decimal(16,2)) DESC
使用MAX
和group by
的另一种方式:
SELECT MAX(CAST([Level] as decimal(16,2))) AS [Level]
,AccountName
FROM TABLE
GROUP BY AccountName
或者,您可以将[Level]的数据类型更改为decimal或float(它可能应该是,而不是varchar),并且您的原始查询将起作用。