日期:2014-05-17  浏览次数:20637 次

这条语句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 孙大庆 3 105
1002 张爱民 2 65
1009 谢广云 3 78
1012 陈一然 2 83
1013 孙晓亮 2 82
1020 王小雪 3 71
1025 于杜友 4 105

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


------解决方案--------------------
count(*)是整行,sum是哪个列
------解决方案--------------------
这里COUNT(*)和SUM(kstab.dhl) 怎么知道是针对谁呢?
这个问题一眼就看得出来啊

group by ktab.khh, ktab.khm 为什么要客户号、客户名一起group?客户号、客户名本来一一对应。
这个问题,虽然客户号、客户名是一一对应,但是group by 的规则是只要在select出现的字段除聚合函数外都要出现在group by中。你可以看下联机丛书的group by用法
------解决方案--------------------
group by的问题,你可以认为select中用到,所以要放到group by,其实sql先执行group by再select,如果group by中没有出现并且不再聚合函数(sum、count等)里面,那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控制了,sum其实原理一样,你这里count是统计结果的行数,sum是汇总哪个列的值
------解决方案--------------------
引用:
Quote: 引用:

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

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


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

因为你分组了啊
如果要全部的后面加over
count(*) over()


------解决方案--------------------
引用:
Quote: 引用:

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

group by ktab.khh, ktab.khm 为什么要客户号、客户名一起group