having的另类用法

在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

   )


你可能感兴趣的:(having的另类用法)