我想检索客户名称、总订单(他们订购了多少次产品)以及他们一生中花费的总金额。运行一个没有Join、group by、having操作符的查询。只向至少有一份订单的客户显示。
这是我的数据库
Customer-    CustomerID| CustomerName   SalesOrder- SalesOrderID | CustomerID | SaleTotal
             100000    |  John                        1001       |   100000   |  2000
             200000    |  Jane                        1002       |   100000   |  3000  
             300000    |  Sean                        1003       |   200000   |  5000当我问起
SELECT CustomerName,count(*) AS Total_Orders,sum(SaleTotal) AS SaleTotal                           
FROM Customer C,SalesOrderHeader SH WHERE C.CustomerID=SH.CustomerID;它只显示一排。我想要的答案是
CustomerName | Total_Orders | SaleTotal
John            2               5000
Jane            1               5000我刚在mysql上新来。这里有人知道怎么做吗?
发布于 2020-08-01 13:28:18
如果要在不使用join和group by的情况下这样做,那么最简单的方法是使用相关子查询:
select *
from (
    select
        c.customerName,
        (
            select count(*) 
            from salesOrder so 
            where so.customerID = c.customerID
        ) totalOrders,
        (
            select sum(salesTotal) 
            from salesOrder so 
            where so.customerID = c.customerID
        ) saleTotal
    from customer c
) t
where totalOrders > 0注意,这个查询显然不是最优的--因为它扫描salesOrder表两次,而一次扫描就足够了。写这篇文章的更好方法是:
select c.customerName, count(*) totalOrders, sum(salesTotal) saleTotal
from customer c
inner join saleOrder so on so.customerID = c.customerID
group by c.customerID, c.customerName这里不需要使用having子句-- inner join过滤掉了已经没有订单的客户。
发布于 2020-08-01 13:27:35
使用聚合。。。以及正确的join语法:
SELECT CustomerName, COUNT(*) AS Total_Orders, SUM(SaleTotal) AS SaleTotal                           
FROM Customer C JOIN
     SalesOrderHeader SH 
     ON C.CustomerID = SH.CustomerID
GROUP BY CustomerName;您的查询在几乎任何数据库中都会失败--包括更新版本的MySQL。在SELECT中有混合聚合列和未聚合列。未聚合的应该在GROUP BY中。
不要在FROM子句中使用逗号。始终使用正确、显式、标准的、可读的JOIN语法。
发布于 2020-08-01 13:28:48
您必须使用下面的查询。没有join和group by,就无法实现它。
SELECT CustomerName,count(*) AS Total_Orders,sum(SaleTotal) AS SaleTotal                           
FROM Customer C,SalesOrderHeader SH WHERE C.CustomerID=SH.CustomerID
group by;https://stackoverflow.com/questions/63205623
复制相似问题