SQL学习之查询技巧 排他查询 只是用过某商品的顾客

本文介绍了一种特定的数据库查询技巧——排他查询,通过两个不同的SQL实现方式来找出仅使用特定产品的客户。此方法适用于需要精确筛选数据的场景。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

销售表如下

customer

product

A

1

B

2

B

1

C

2

D

1

E

2

求只使用过2产品的顾客( 没有使用过其他产品) 排他查询

表结构

 

DECLARE   @tb   TABLE ( [ customer ]   varchar ( 10 ),  [ product ]   varchar ( 10 ))
INSERT   INTO   @tb
    
SELECT    ' A ' ' 1 '
    
UNION   ALL   SELECT   ' B ' ' 2 '
    
UNION   ALL   SELECT   ' B ' ' 1 '
    
UNION   ALL   SELECT   ' C ' ' 2 '
    
UNION   ALL   SELECT   ' C ' ' 2 '
    
UNION   ALL   SELECT   ' D ' ' 1 '
    
UNION   ALL   SELECT   ' E ' ' 2 '
    
UNION   ALL   SELECT   ' C ' ' 2 '

查询;

SELECT    customer,
         
Count ( product)  times
FROM       @tb  t
WHERE      EXISTS  ( SELECT   1
                 
FROM     @tb
                 
WHERE   customer  =  t.customer
                        
AND  product  =   2 )
GROUP   BY  customer
HAVING     Count ( DISTINCT  product)  =   1

结果

customer   times
-- -------- -----------
C           3
E          
1

(
2  行処理されました)

其他方法

 

SELECT    customer,
         
Count ( *  ) times
FROM       @tb
WHERE     customer  NOT   IN  ( SELECT  customer
                          
FROM     @tb
                          
WHERE   product  !=   2 )
GROUP   BY  customer

 

整理自http://community.youkuaiyun.com/Expert/topic/5342/5342039.xml?temp=.7104914

谢谢hhhdyj(萤火虫)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值