說我有一個表,如下所示SQL:如何選擇僅購買特定產品的用戶?
CUSTOMER PURCHASES
James Basketball
James Football
Alex Basketball
我將如何選擇的客戶,只購買了籃球? 即只有亞歷克斯。感謝您的任何幫助或建議。
說我有一個表,如下所示SQL:如何選擇僅購買特定產品的用戶?
CUSTOMER PURCHASES
James Basketball
James Football
Alex Basketball
我將如何選擇的客戶,只購買了籃球? 即只有亞歷克斯。感謝您的任何幫助或建議。
這是一種使用標準SQL的方式;
SELECT CUSTOMER FROM Table1
GROUP BY CUSTOMER
HAVING COUNT(*) = 1
AND MAX(PURCHASES)='Basketball'
如果客戶可能購買了多個籃球,您可以用COUNT(DISTINCT Purchases)
代替COUNT(*)
。
如果你去數據庫特定的,一個更可讀的選項可能是EXCEPT
或MINUS
,這裏是一個SQL服務器版本;
SELECT CUSTOMER FROM Table1 WHERE PURCHASES='Basketball'
EXCEPT
SELECT CUSTOMER FROM Table1 WHERE PURCHASES<>'Basketball'
......這將做與後者(可能購買多個籃球)相同的事情。
我的第一個想法是第一個選擇。我沒想到第二個,我也很喜歡!我想知道兩種流行的SQL實現之間的性能影響。 –
我用你提供的第一個選項,它解決了。只是想知道,爲什麼你使用MAX for MAX(PURCHASES)='籃球'?謝謝您的幫助!! – user2853262
@ user2853262在標準SQL中,除非您將它分組或在集合函數中使用它(例如'MIN' /'MAX' /'AVG),否則您不能在'HAVING'中使用''Purchases'' '/ ...)。在這種情況下(每組只有一個結果),MAX和MIN會給出相同的結果。 –
select *
from purchase
group by customer
having count(*) = 1
and purchases = 'BasketBall';`
工作實例
'COUNT' +'集團BY' +'HAVING'(+是'DISTINCT'的情況下,如果一個客戶可以購買兩次相同的產品,這是一個你的有效案例) – zerkms
我對你之前試過的這個產品很感興趣 –