2016-05-28 71 views
1

我有這樣下來分貝:我怎樣才能計數CUSTOMER_ID其中STORE_ID計數超過1

+---+-------------+---------- 
|id | customer_id | store_id| 
+---+-------------+---------- 
|1 | 1   | 1001| 
|2 | 1   | 1002| 
|3 | 1   | 1001| 
|4 | 1   | 1003| 
|5 | 2   | 1001| 
|6 | 2   | 1001| 
|7 | 3   | 1001| 
|8 | 3   | 1002| 
|9 | 3   | 1001| 
|10 | 4   | 1003| 
|11 | 4   | 1001| 
|12 | 4   | 1002| 
+---+-------------+---------- 

我希望計數不同CUSTOMER_ID其中購物不同shop_id比值1.(EXP更多CUSTOMER_ID 1購物1001 ,1002和customer_id 4購物1001,1002,1003和customer_id 3購物1001,1002,而customer_id 2只是購物1001)

回答

1

您可以使用嵌套查詢 - 內部查詢只篩選具有多個商店ID的客戶ID,外面的一個數:

SELECT COUNT(*) 
FROM (SELECT customer_id 
     FROM  my_table 
     GROUP BY customer_id 
     HAVING COUNT(DISTINCT store_id) > 1) t 

請注意,內部查詢中的group by已返回不同的客戶ID,因此外部查詢在其調用count時不需要distinct

+1

太棒了!感謝您的回答 –

0

使用子查詢計數STORE_ID爲每CUSTOMER_ID,數與行數超過一個

SELECT COUNT(*) 
FROM (SELECT count(*) cnt 
     FROM my_table 
     GROUP BY customer_id 
    ) t 
WHERE cnt > 1 
0

下面是隻有一個級別聚集的方法:

select count(distinct customer_id) 
from t 
where exists (select 1 
       from t t2 
       where t2.customer_id = t.customer_id and 
        t2.store_id <> t.store_id 
      ); 

這查詢應該能夠利用t(customer_id, store_id)上的索引,這可能會使其具有性能優勢。