1. 实现的代码和返回数据
SELECT nvl(MAX(nvl(smcrealcount,0)),0),
nvl( MAX(decode(nvl(smcrealcount,0),0,NULL,smcrealcount)) ,0) FROM test WHERE begintime=to_date('2009-08-31','yyyy-mm-dd')
--1 134982 668402. 不取最大值时的数据情况
SELECT nvl(smcrealcount,0),
decode(nvl(smcrealcount,0),0,NULL,smcrealcount)
FROM test
WHERE begintime=to_date('2009-08-31','yyyy-mm-dd')
1 0
2 0
3 0
4 0
5 134982 134982
6 0
7 0
8 0
9 0
10 66840 66840
11 0
12 0
13 0
14 66402 66402
15 0
16 0
17 0
18 0
19 66744 667443. 取最大值的情况
SELECT max(nvl(smcrealcount,0)),
max(decode(nvl(smcrealcount,0),0,NULL,smcrealcount))
FROM test
WHERE begintime=to_date('2009-08-31','yyyy-mm-dd')
--1 134982 66840
nvl( MAX(decode(nvl(smcrealcount,0),0,NULL,smcrealcount)) ,0)decode 的时候,smcrealcount值为0的输出null
不为0的,输出smcrealcount
输出的smcrealcount类型要与null保持一致
系统将这个类型认为是字符型
smcrealcount被转换成字符型了,因此最大的是以6开头的那个数
你在decode 外围加个to_number试试
会得到不同的结果
select max(decode(nvl(smcrealcount,0),0,0,smcrealcount)) from test;