2013-02-17 48 views
1

比方说,我的表是这样的:我不能使用MAX()正确SQL

id code newCode 
------------------- 
1 30002 3000231 
2 30002 3000232 
3 30002 300021 
4 30002 300021 
5 30009 300093 
6 30009 300093 
7 30012 30
8 30012 30
9 30012 300124 
10 30012 300121 
11 30012 300121 
12 30013 3001331 
13 30013 3001332 
14 30013 300134 

,我想获得newCode重复的次数最多(在这种情况下2 - 例如NUM 10和11是相同的,所以2)

我的SQL命令是:

SELECT MAX(c.newCode) 
FROM 
      SELECT COUNT(c.newCode) 
      FROM courseTaun c 
      GROUP BY c.newCode 

,我只是得到语法错误。

如果我只运行:

SELECT COUNT(c.newCode) 
      FROM courseTaun c 
      GROUP BY c.newCode 

我得到:

COUNT(c.newCode) 
2 
1 
1 
2 
2 
1 
1 
1 
1 
1 
1 

如果我只运行

SELECT MAX(c.newCode) 
FROM courseTaun c 

我得到的值:300134

为什么”我似乎将2合并为给予我的我需要的价值?

非常感谢您对

+0

子查询会是什么你需要的价值?只是一个普通的'2'? – 2013-02-17 14:14:20

回答

1

我猜NewCode柱被保存为string佣工:)。为了得到最大的价值,你需要将它转换到第一个数字,

SELECT MAX(CAST(newCode as SIGNED)) 
FROM 
(
    SELECT newCode 
    FROM tableName 
    GROUP BY newCode 
    HAVING COUNT(*) > 1 
) s 

更新1

SELECT MAX(CAST(newCode as INT)) 
FROM 
(
    SELECT newCode 
    FROM table1 
    GROUP BY newCode 
    HAVING COUNT(*) > 1 
) s 
+0

+1 - 你对转换是正确的,因为当执行'SELECT MAX(c.newCode) FROM courseTun c'时,OP得到'300134'而不是'3001332'的值 – SkyDrive 2013-02-17 14:18:55

1

因为你缺少括号背后FROM

... FROM (statement) x 
1
select max(dups) from (select count(newCode) as dups from courseTaun group by newCode) as temp1; 
0

你的SQL命令有语法错误,但在SQLServer2005的+,你可以编写查询,而无需像这样

SELECT TOP 1 MAX(COUNT(c.newCode)) OVER() 
FROM courseTaun c 
GROUP BY c.newCode