mysql - 与平均值和长度相关的 SQL 查询

标签 mysql sql sql-server

我有一个问题。我目前正在做一项作业,但在一个特定的请求中遇到了麻烦。 请求是:

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/

相关文章:

ios - MySQL 数据库字段更新应该在 ios 中触发函数

c++ - 如何在 C/C++ 中提交 SQLite 事务?

mysql - 突然我收到错误 #1366,因为我的列没有默认值

c# - 向 SQL Server Full Text Stemmer 添加单词

SQL CASE LIKE 具有多种选择

java - Hibernate工具,auto cascade all

php - 删除 PHP 中的调试消息

c# - 数据库关系记录归档和恢复

SQL拆分字符串后向其他表插入数据

mysql - MySQL 中何时使用单引号、双引号和反引号