首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 数据库 > SQL Server >

这条语句count和sum是针对哪位高手的

2013-12-09 
这条语句count和sum是针对谁的?ktab是客户表,包含客户号、客户名、电话、地址等信息,stab是商品表,包含商品号

这条语句count和sum是针对谁的?
ktab是客户表,包含客户号、客户名、电话、地址等信息,
stab是商品表,包含商品号,商品名、品牌、型号、单价等信息,
kstab是订货表,包含客户号、商品号、订货量信息。

select ktab.khh 客户号, ktab.khm 客户名, COUNT(*) 订购商品种数, SUM(kstab.dhl) 总订货量
from ktab, kstab
where ktab.khh=kstab.khh
group by ktab.khh, ktab.khm
go
查询结果:
客户号客户名订购商品种数总订货量
1001孙大庆3105
1002张爱民265
1009谢广云378
1012陈一然283
1013孙晓亮282
1020王小雪371
1025于杜友4105

这里COUNT(*)和SUM(kstab.dhl) 怎么知道是针对谁呢?
group by ktab.khh, ktab.khm 为什么要客户号、客户名一起group?客户号、客户名本来一一对应。


[解决办法]


如果要全部的后面加over
count(*) over()


[解决办法]
引用:
Quote: 引用:

这里COUNT(*)和SUM(kstab.dhl) 怎么知道是针对谁呢?
这个问题一眼就看得出来啊

group by ktab.khh, ktab.khm 为什么要客户号、客户名一起group?客户号、客户名本来一一对应。
这个问题,虽然客户号、客户名是一一对应,但是group by 的规则是只要在select出现的字段除聚合函数外都要出现在group by中。你可以看下联机丛书的group by用法


为什么COUNT(*)不是对数据表的所用行数,而是分别对每一个客户呢?还有SUM(kstab.dhl)也是?
因为你的group by 控制select在查询的时候是进行分组计算的
[解决办法]
引用:
Quote: 引用:

这里COUNT(*)和SUM(kstab.dhl) 怎么知道是针对谁呢?
这个问题一眼就看得出来啊

group by ktab.khh, ktab.khm 为什么要客户号、客户名一起group?客户号、客户名本来一一对应。
这个问题,虽然客户号、客户名是一一对应,但是group by 的规则是只要在select出现的字段除聚合函数外都要出现在group by中。你可以看下联机丛书的group by用法


为什么COUNT(*)不是对数据表的所用行数,而是分别对每一个客户呢?还有SUM(kstab.dhl)也是?
你最好还是看看group by 的用法先
[解决办法]
lz:
     select count(*) from 表名;    --选取所有行

     select 列名, count(*) from 表名 group by 列名
                                         --这后面一定要有group by,他是对count(*)前面的列名分组



[解决办法]
引用:
Quote: 引用:

这里COUNT(*)和SUM(kstab.dhl) 怎么知道是针对谁呢?
这个问题一眼就看得出来啊

group by ktab.khh, ktab.khm 为什么要客户号、客户名一起group?客户号、客户名本来一一对应。
这个问题,虽然客户号、客户名是一一对应,但是group by 的规则是只要在select出现的字段除聚合函数外都要出现在group by中。你可以看下联机丛书的group by用法


为什么COUNT(*)不是对数据表的所用行数,而是分别对每一个客户呢?还有SUM(kstab.dhl)也是?


这个得看具体情况,count(*) 一般确实统计所有行数的。



但由于这个count是个聚合函数,所以一般更重要的用途是用在有group by 的情况下,比如:

select x1,x2,count(*)
from tb
group by x1,x2

那么这个时候,就不是整个表中有多少数据了,而是x1,x2这两列分组去重后,一共有多少条数据,也就是x1和x2,这个组合,有多少条 ,比如:

x1 x2
1  2
2  1
1  2

那么结果就是:
x1 x2 count(*)的条数
1  2  2
1  2  1

热点排行