读书人

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

发布时间: 2013-12-09 09:45:50 作者: rapoo

这条语句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

读书人网 >SQL Server

热点推荐