我想创建一个变量来计算每个客户ID在CSV中出现的次数,然后我希望输出为出现0,1或2次的所有客户ID。到目前为止,这是我的代码:
SELECT Customers.customer_id , COUNT(*) AS counting
FROM Customers
LEFT JOIN Shopping_cart ON Customers.customer_id = Shopping_cart.customer_id
WHERE counting = '0'
OR counting = '1'
OR counting = '2'
GROUP BY Customers.customer_id;
答案 0 :(得分:1)
SELECT Customers.customer_id , COUNT(*) AS counting
FROM Customers LEFT JOIN Shopping_cart on Customers.customer_id=Shopping_cart.customer_id
WHERE COUNT(*) < 3
GROUP BY Customers.customer_id;
查询对所有客户ID进行分组,并使用count()获取组中的项目数。因此,对于您的解决方案,您可以调用组计数()并仅说出组计数小于3的项目。小于3包括(0,1,2)。您可以在查询中重复使用count()。
答案 1 :(得分:0)
您可能会考虑
1.0 0.0 0.0 0.0
0.0 -1.0 0.0 0.0
0.0 0.0 0.5 0.5
0.0 0.0 0.0 1.0
,而不是HAVING
。
例如:
WHERE
虽然有点奇怪,但您可能会对HAVING条件有所了解:
select JOB, COUNT(JOB) from SCOTT.EMP
group by JOB
HAVING count(JOB) > 1 ;
注意:WHERE子句用于过滤行,它适用于每一行,而HAVING子句用于过滤组。
答案 2 :(得分:0)
您可以在聚合后使用HAVING子句应用过滤器。
请注意count(*)
计算所有行,包括空行,因此您无法使用它来检测没有任何购物车的客户;你必须在某些列中计算非NULL值:
SELECT customer_id,
count(Shopping_cart.some_id) AS counting
FROM Customers
LEFT JOIN Shopping_cart USING (customer_id)
GROUP BY customer_id
HAVING count(Shopping_cart.some_id) BETWEEN 0 and 2;