SQL max 涉及 3 个表的计数

Posted

技术标签:

【中文标题】SQL max 涉及 3 个表的计数【英文标题】:SQL max of a count involving 3 tables 【发布时间】:2013-03-14 03:01:45 【问题描述】:

我有一个表CustomersCustomerIDPhoneNumber,第二个表是Orders,它有CustomerIdOrderNumber,第三个表OrderDetailsOrderNumber,@987654329 @ 和 UnitsOrdered。我需要为下最大订单的客户 (PriceOfOneUnit * UnitsOrdered) 找到 PhoneNumber。将count(PriceOfOneUnit*UnitsOrdered) 设置为A1,然后将 `Group By CustomerId Order By A1 DESC LIMIT 1 在加入 3 个表后显然不起作用。谁能帮忙。

【问题讨论】:

您要获取订单的总金额还是单笔订单的最大金额? 我要找到投资最多的人。这意味着当每个客户订购的物品数量乘以订购物品的价格时的最高数量。也就是说,顾客 John 订购了 2 件售价 5 美元的洗发水和一件售价 3 美元的护发素,顾客 Jane 订购了 4 件售价 1 美元的肥皂。我的结果需要显示约翰的信息。 如果出现平局,你想看什么? @user2204894 我明白了,但我要问的是我需要计算所有订单的总金额还是我只计算每个订单的总金额并获得最高的投资金额?跨度> 如果出现平局,我需要同时显示两者。 【参考方案1】:

如果我们相信您的话,并且您想要的是最大的单个订单项而不是最大的订单,您可以找到最大的订单项,然后找到它所属的订单,然后是购买的客户下了那个订单。您可以使用虚拟聚合函数从 orderDetails 中拉回订单 ID。

编辑: 好的,对于刚起步的人,我认为用维恩图来思考并使用所谓的内联视图和子查询会更清楚:

select customername, phone
from customer
inner join

(

     select o.id, customerid from orders o
     inner join
      ( 
        select od.orderid from orderdetail od
        where (od.qty * od.itemprice) =
            (
              select max(od.qty * od.itemprice)
              from orderdetail as od
            ) 

      ) as biggestorder
    on o.id = biggestorder.orderid

 ) as X
on customer.id = X.customerid

括号内的每个查询都返回一个可以与其他集合连接/相交的集合。

【讨论】:

我知道这是各种错误,但我才刚刚开始。因此,我将对编辑提供任何帮助。选择customers.customerName,customers.phone,orders.customerNumber,count(orderdetails.priceEach*orderdetails.Quantityordered) from customers 完全加入customers.customerNumber=orders.customernumbers 完全加入orderdetails on orders.orderNumber=orderdetails.orderNumber;跨度> 【参考方案2】:

试试看,

SELECT  cus.CustomerId, cus.PhoneNumber
FROM    Customers cus
        INNER JOIN Orders a 
            ON cus.CustomerId = a.CustomerId
        INNER JOIN OrderDetails b
            On a.OrderNumber  = b.OrderNumber 
GROUP   BY cus.CustomerId, cus.PhoneNumber
HAVING  SUM(b.PriceOfOneUnit * b.UnitsOrdered) = 
        (
            SELECT  SUM(b.PriceOfOneUnit * b.UnitsOrdered) totalOrdersAmount
            FROM    Orders aa
                    INNER JOIN OrderDetails bb
                        On aa.OrderNumber  = bb.OrderNumber
            GROUP   BY aa.CustomerId
            ORDER   BY totalOrdersAmount DESC
            LIMIT   1
        )

【讨论】:

以上是关于SQL max 涉及 3 个表的计数的主要内容,如果未能解决你的问题,请参考以下文章

SQL:SELECT MAX(Date) 涉及几个表

MySQL INNER JOIN 3 个表的计数和总数

左连接计数来自第二个表的三个属性

mysql加入3个表并计数

3 个表和一个子查询的 SQL 连接问题

使用 4 个表的 SQL MAX 查询