在where条件里面不能用聚合函数,但是having里面可以
在某些已经完全限定条件,查出来的结果集只可能是1条时,
可以不用group by 只用having来实现某些条件限制,只是不知道这样有没有效率问题
举例说明:
inventory 表结构
invCode 物料编号
pnType 物料的类型(A,B,C,D四类)
另外一个表 dispatch 发货单表(经过整理的)
dispatchNo 发货单号
cusCode 客户编号
invCode 物料编号
要统计某一段时间内,
对于某个物料,购买客户数 大于 10,
或者 有该物料的发货单数大于 20,
把inventory 表中的pnType更新成'A'
正常做法
update inventory set pntype='A'
where exists
(
select 1 from (select COUNT(distinct dis.dispatchNo) as disCnt, COUNT(distinct dis.cusCode ) as cusCnt from dispatch dis where dis.invCode =inventory.invCode ) t
WHERE t.disCnt>= 20 or cusCnt >= 10
)
特别一点的做法
update inventory set pntype='A'
where exists
(
select 1 from dispatch dis where dis.invCode = inventory.invCode
having COUNT(distinct dis.dispatchNo) >= 20 or COUNT(distinct dis.cusCode) >= 10
)