在SQL中创建变量并在WHERE子句中使用

时间:2017-03-19 22:05:56

标签: sql sqlite count

我想创建一个变量来计算每个客户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; 

3 个答案:

答案 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;