SELECT sum(1) FROM table;和SELECT count(1) FROM table;

问题描述:

SELECT sum(1) FROM table;和SELECT count(1) FROM table;
SELECT sum(1) FROM table;----------------累加'1'列的总和;
SELECT count(1) FROM table;--------------统计'1'列的总条数;
这里总和与总条数有何不同?
应该是这样:
如果:
SELECT SUM(ID) FROM test_t;
SELECT COUNT(ID) FROM test_t;
则第一个返回的是ID列所有值的总和,第二个是ID列的行数.
我的意思是如果使用sum(1)就会返回第一列所有不为NULL的行数,如果使用sum(具体的列名),则会返回该列所有行所存数值的总和.
如果:
SELECT SUM(1) FROM test_t;
SELECT COUNT(1) FROM test_t;
则第一个和第二个都是返回第一列的行数.
准确来讲,只有count会统计NULL列,其它的聚合函数都会忽略NULL列,
1个回答 分类:综合 2014-09-30

问题解答:

我来补答
两者在对于null的记录处理不一样
count是统计所有行计数
sum是对不为null的行求和,
所以上两式结果在有null行的时候是不一样的(没有null的记录时结果一样)
msdn对聚合函数描述第1句就说了这个问题,如下:
聚合函数对一组值执行计算,并返回单个值.除了 COUNT 以外,聚合函数都会忽略空值.
-----------------------
lz还没弄懂么?
有这么一张表tmp
a
1
2
3
4
5
6
null
8
count(1)值是8
sum(1)值是7
-----------------------
我以为lz已经明白sum用法才会问sum(1)这种独特用法呢
看来还得全部解释一遍所有的聚合函数如下
还是上面的例子
sum(a)=29
sum(1)=7
count(a)=count(1)=count(*)=8
max(a)=8
min(a)=1
avg(a)=sum(a)/sum(1)=29/7=4.14 (如果a是int型的,那结果自动取整为4),注意avg也是跳过null行的,所以分母只能算sum(1)
看lz还有什么疑问
----------------------------

lz的分不好挣啊
看上面msdn的连接,里面有详细的例子
msdn写的不错,遇到有问题的,到里面看看还是不错的
msdn对聚合函数描述第1句就说了这个问题,如下:
聚合函数对一组值执行计算,并返回单个值.除了 COUNT 以外,聚合函数都会忽略空值.
 
 
展开全文阅读
剩余:2000
上一页:pass..
下一页:复合函数求值域
也许感兴趣的知识