新手问个问题。select 购物人 from 表 group by 购物人 having count(商品名称)>=2select * from 表 where 购物人 in (select 购物人 from 表 group by 购物人 having count(商品名称)>=2)前者不是已经抽出来了吗?更何况他们是同一张表,后者只不过再过滤一下。对吗?请指教。

解决方案 »

  1.   

    不好意思,还不是很明白。。那个子句和第一个SQL是一样的。为什么一个是购买同一种商品的所有记录,一个是哪些人呢?两者有区别吗?
      

  2.   

    第一个以购物人分组对数据进行聚合,计算出每个"购物人"对应的记录条数。再通过having子句过滤出count(..)大于2的结果
    这个结果是聚合过的结果,只有购物人和购物总数总额等信息
    下面那个能找出符合条件的购物人对应的所有记录,这个记录是聚合前的,也就是没有经过group by的。如果你还不明白,就自己建个表测试一下。
    第二个性能不太高,可以这么写
    select * from(
      select tt.*,count(1)over(partition by 购物人)c from tt)
    where c>2
      

  3.   

    感谢各位回答。。不过那个over(partition by 购物人)还没弄清楚。。我到网上搜一下。。