我有一个问题。我目前正在做一项作业,但在一个特定的请求中遇到了麻烦。 请求是:
Find Customers who have purchased more than 2 times. Get the
1. customer information
2. purchase frequency
3. total spending
4. avg basket size.
我已经得到了 1 - 3,但我对 4 号无能为力。 产品上的值可以有多个值,以逗号分隔。
~> (产品 id: 12,4,5) -> 如果订单购买超过 1 个产品
我已经到了可以用长度替换将其分开的地步,但我对如何将其显示为平均篮子尺寸有点困惑。
感谢您的帮助!
SQL 表图像 sql table
**Customer**
Customer ID
Name
AddressCity
**Order**
OrderID
CustomerID
ProductID
Total
**Delivery**
DeliveryID
OrderID
AddressCity
这是我当前的sql语句
SELECT Customer.*, Order.CustomerID,
COUNT(Order.CustomerID) AS PurchaseFrequency,
SUM(Order.Total) AS TotalSpending
FROM Customer JOIN Order
ON Customer.CustomerID=Order.CustomerID
Group By Customer.CustomerID
Having Count(*) > 1
最佳答案
LEN(Order.ProductID) - LEN(REPLACE(Order.ProductID, ',', '')) + 1
应该为您提供每个订单的产品总数。 只需将其添加到您现有的语句中即可。
SELECT Customer.*, Order.CustomerID,
COUNT(Order.CustomerID) AS PurchaseFrequency,
SUM(Order.Total) AS TotalSpending,
AVG(LEN(Order.ProductID) - LEN(REPLACE(Order.ProductID, ',', '')) + 1) as AvgProdQuantityPerOrder
FROM Customer JOIN Order
ON Customer.CustomerID=Order.CustomerID
Group By Customer.CustomerID
Having Count(*) > 1
编辑:
SELECT 部分中使用的字段也应在 GROUP BY 部分中指定。您的查询将变成这样:
SELECT Customer.CustomerID, Customer.Name, Customer.AdressCity,
COUNT(Order.CustomerID) AS PurchaseFrequency,
SUM(Order.Total) AS TotalSpending,
AVG(LEN(Order.ProductID) - LEN(REPLACE(Order.ProductID, ',', '')) + 1) as AvgProdQuantityPerOrder
FROM Customer JOIN
Order ON Customer.CustomerID=Order.CustomerID
GROUP BY Customer.CustomerID, Customer.Name, Customer.AdressCity
Having Count(*) > 1
关于mysql - 与平均值和长度相关的 SQL 查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42839697/