MySQL - 在 join 和 from 上使用子查询

巴比什卡

我试图为所有订单的每个客户返回 CustomerID、CompanyName、OrderID 和小计,小计金额高于客户的平均小计金额。这些是我正在使用的表和下面的查询。我不确定我返回的值是否正确,希望有人可以帮助我了解它们是否基于我的查询。提前致谢。

Orders
 Columns
  OrderID
  CustomerID
  EmployeeID
  OrderDate
  RequiredDate

OrderDetails
 Columns
  OrderID
  ProductID
  UnitPrice
  Quantity

Products
 Columns
  ProductID
  ProductName
  QuantityPerUnit
  UnitPrice

Customers
 Columns
  CustomerID
  CompanyName
  ContactName
  Country





SELECT A.CustomerID, A.CompanyName, A.Subtotal, A.OrderID, AVGSubtotal
FROM (
    SELECT
        C.CustomerID,
        C.CompanyName,
        (D.UnitPrice * P.QuantityPerUnit) AS Subtotal,
        D.OrderID
    FROM Customers C
        JOIN Orders O ON C.CustomerID = O.CustomerID
        JOIN OrderDetails D ON D.OrderID = O.OrderID
        JOIN Products P ON P.ProductID = D.ProductID
    GROUP BY
        D.OrderID, C.CustomerID
) A
JOIN (
    SELECT
        S.CustomerID, S.CompanyName, AVG(S.Subtotal) as AVGSubtotal
    FROM (
        SELECT
            C.CustomerID,
            C.CompanyName,
            (D.UnitPrice * P.QuantityPerUnit) AS Subtotal
        FROM Customers C
            JOIN Orders O ON C.CustomerID = O.CustomerID
            JOIN OrderDetails D ON D.OrderID = O.OrderID
            JOIN Products P ON P.ProductID = D.ProductID
        GROUP BY
            D.OrderID, C.CustomerID
        ) S
    GROUP BY
        S.CustomerID
) B ON A.CustomerID = B.CustomerID 
WHERE
    A.CustomerID = B.CustomerID AND 
    A.Subtotal > B.AVGSubtotal 
ORDER BY
    A.CustomerID, A.CompanyName
;
列昂尼德·扎哈罗夫
select
  c2.customerID,
  c2.CompanyName,
  c2.AVGSubtotal
  o2.OrderID,
  o2.UnitPrice * o2.Quantity as subtotal
from (
  select
    c.CustomerID,
    c.CompanyName,
    sum(o.UnitPrice * o.Quantity)/count(*) as AVGSubtotal
  from
    Customers c
    inner join Orders o on (o.CustomerID = c.CustomerID)
    inner join OrderDetails od on (od.OrderID = c.OrderID)
  group by
    o.CustomerID  
) as c2
inner join Orders o2 on (o2.CustomerID = c2.CustomerID)
where o2.UnitPrice * o2.Quantity > c2.AVGSubtotal

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

MySQL Join和COUNT(*)查询

来自分类Dev

如何使用主查询中的LEFT JOIN和子查询中的INNER JOIN优化MySQL SELECT查询?

来自分类Dev

使用INNER JOIN和LEFT JOIN的MySQL查询

来自分类Dev

INNER JOIN与mysql中的max和where子句的子查询

来自分类Dev

如何在mysql中使用join和union进行子查询

来自分类Dev

MySQL子查询JOIN

来自分类Dev

Mysql JOIN子查询

来自分类Dev

mysql查询与Join和union all

来自分类Dev

LINQ查询和LEFT JOIN条件上的子查询

来自分类Dev

使用COUNT和LEFT JOIN进行缓慢的MYSQL查询

来自分类Dev

使用LEFT JOIN(SELECT)ORDER和LIMIT的MySQL查询

来自分类Dev

如何使用JOIN和BETWEEN where子句加快MYSQL查询?

来自分类Dev

使用LEFT JOIN和History表的MySQL查询的正确结果

来自分类Dev

使用join子句和group by子句的mysql查询

来自分类Dev

MySQL Join和EXISTS结合使用

来自分类Dev

在mysql中使用join和group by子句

来自分类Dev

MYSQL JOIN和IN子句

来自分类Dev

子查询和JOIN在COUNT上应用MAX SQL Oracle

来自分类Dev

如何使用MySQL子查询和GROUP BY

来自分类Dev

MySQL GROUP_CONCAT在子查询中具有SUM()和多个JOIN

来自分类Dev

MySQL INNER JOIN 带有子查询和最大日期的空行

来自分类Dev

对 JOIN 和 UNION 以及子查询使用相同的“WHERE”子句

来自分类Dev

慢的mysql查询,包括Left Join和Selects

来自分类Dev

慢的mysql查询,包括Left Join和Selects

来自分类Dev

Mysql查询结合join、group by、have和order by子句

来自分类Dev

MySQL IF 和 JOIN 在 SELECT 查询中生成冗余行

来自分类Dev

MySQL慢子查询,我应该使用JOIN吗?

来自分类Dev

使用GROUP BY的MySQL查询和使用ORDER BY的子查询

来自分类Dev

一列上的 MySQL DISTINCT 和 LEFT JOIN

Related 相关文章

热门标签

归档