依靠SQL中的一系列值

时间:2013-06-24 23:49:46

标签: mysql sql google-bigquery

我有一个包含两列的表 - 客户ID和他们购买的产品数量。

我会用什么SQL语句来了解有多少客户购买了1个或更多产品,2个或更多产品,3个或更多产品等?

这可以在不使用交叉连接的情况下完成(我正在使用不支持它的谷歌bigquery)。

3 个答案:

答案 0 :(得分:4)

如果您真的需要计算分别购买“一个或多个”和“两个或更多”的客户数量,则需要CASE表达式:

SELECT SUM(CASE WHEN NumOfProducts >= 1 THEN 1 ELSE 0 END) AS Purchased_1_or_more
     , SUM(CASE WHEN NumOfProducts >= 2 THEN 1 ELSE 0 END) AS Purchased_2_or_more
     , SUM(CASE WHEN NumOfProducts >= 3 THEN 1 ELSE 0 END) AS Purchased_3_or_more
     , SUM(CASE WHEN NumOfProducts >= 4 THEN 1 ELSE 0 END) AS Purchased_4_or_more
     , SUM(CASE WHEN NumOfProducts >= 5 THEN 1 ELSE 0 END) AS Purchased_5_or_more
FROM Customers

等等,无论你想要多少类别。

答案 1 :(得分:1)

尝试使用:

SELECT 
CASE NumOfProducts >= 1 THEN 1
WHEN NumOfProducts >= 2 THEN 2
WHEN NumOfProducts >= 3 THEN 3
ELSE 0
END CASE,
COUNT(CustomerID) AS cnt
FROM Customers
GROUP BY CASE NumOfProducts >= 1 THEN 1
WHEN NumOfProducts >= 2 THEN 2
WHEN NumOfProducts >= 3 THEN 3
ELSE 0
END;

答案 2 :(得分:-1)

我不相信这可以使用没有交叉产品的直接SQL。

原因如下 - 我们关心崩溃的操作是使用“分组依据”。然而,按工作分组的方式是,它需要多行并在执行某些聚合计算时将它们折叠为一个行。

要进行这种“一个或多个”分析,一行需要成为多行计算的一部分。即购买了10个产品的用户的行必须是“1或更多”,“2或更多”,“3或更多”等行的一部分,等等。没有任何操作可以让你这样做。