说我有一个表,如下所示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
我对你之前试过的这个产品很感兴趣 –