【问题标题】:How to create a subquery in Access如何在 Access 中创建子查询
【发布时间】:2020-10-30 20:06:06
【问题描述】:

我对如何正确执行 Microsoft Access 子查询感到很困惑。我有一个假设,我应该在其中创建一个,但我终其一生都无法弄清楚。问题来了:

第三季度。获取订购书籍的所有第二作者的姓氏和名字。在书名旁边印上这些名字。还显示这些标题中的每一个的总销售量。总销售量是订单行中的书籍数量乘以它们的价格,并为同一作者的所有订单相加。按销售总额的降序排列结果(提示:使用 SUM 函数将乘法相加,并使用 GROUP BY 对每个作者和标题进行这些加法)。

我已经弄清楚了这两个部分的 SQL(或者我认为是这样)。这是我到目前为止所得到的:

打印标题、姓氏和名字:

SELECT Book.Title, Author.LastName, Author.FirstName<br>
FROM Wrote, Author, Book, OrderLine<br>
WHERE Wrote.AuthorRank = 2<br>
AND Wrote.AuthorId = Author.AuthorID<br>
AND Book.ISBN = Wrote.ISBN<br>
AND OrderLine.ISBN = Book.ISBN;

计算总销售量:

SELECT SUM(Quantity * Price) AS TotalAmountSold<br>
FROM Book, OrderLine<br>
GROUP BY Title;

我正在努力弄清楚如何将这些组合在一起以实现问题对我的要求。有什么提示可以帮助我理解如何做这样的事情吗?提前致谢。

【问题讨论】:

  • 您的聚合查询不会给出正确的计算,因为没有 JOIN 子句。通过将一个 SQL 语句复制/粘贴到 SQLView 中的另一个 SQL 语句来构建嵌套查询。因此,构建一个连接查询/表的查询,然后复制/粘贴,最终得到类似SELECT q1.*, q2.* FROM q1 INNER JOIN (SELECT …) AS q2 ON q1.ISBN=q2.ISBN ORDER BY TotalAmountSold DESC; 的内容。尽可能使用 JOIN 子句而不是 WHERE 来链接表。什么是“第二”作者?
  • 如果 AuthorRank 字段 = 2,我相信他所说的第二作者的意思是在 Wrote 表上。他们将被归为该书的第二作者。

标签: sql ms-access subquery


【解决方案1】:

构建并保存查询 1:

SELECT OrderLine.ISBN, Title, Sum([Quantity]*[Price]) AS TotalAmountSold
FROM OrderLine INNER JOIN Book ON OrderLine.ISBN = Book.ISBN
GROUP BY OrderLine.ISBN, Title;

构建查询 2:

SELECT Author.AuthorID, FirstName, LastName, Title, TotalAmountSold
FROM (Author INNER JOIN Wrote ON Author.AuthorID = Wrote.AuthorID) 
INNER JOIN Query1 ON Wrote.ISBN = Query1.ISBN
WHERE (((Wrote.AuthorRank)=2))
ORDER BY TotalAmountSold DESC;

如果您想要一个一体式 SQL,请将 Query1 SQL 复制/粘贴到 Query2 中,结果如下:

SELECT Author.AuthorID, FirstName, LastName, Title, TotalAmountSold
FROM (Author INNER JOIN Wrote ON Author.AuthorID = Wrote.AuthorID) 
INNER JOIN 
     (SELECT OrderLine.ISBN, Title, Sum([Quantity]*[Price]) AS TotalAmountSold
      FROM OrderLine INNER JOIN Book ON OrderLine.ISBN = Book.ISBN
      GROUP BY OrderLine.ISBN, Title) AS Query1 
ON Wrote.ISBN = Query1.ISBN
WHERE (((Wrote.AuthorRank)=2))
ORDER BY TotalAmountSold DESC;

保存 Query2 并删除 Query1。

【讨论】:

  • 谢谢你。我们甚至还没有深入了解如何使用 JOIN。从迄今为止收集到的信息来看,我现在了解到 GROUP BY 应该只用于聚合函数。这帮助我学习如何正确使用这些。我现在唯一遇到的麻烦是如何在我的查询中使用 ORDER BY。这是我所拥有的:
  • 选择 Book.Title, Author.LastName, Author.FirstName, SUM(Quantity * Price) AS [Total Amount Sold] FROM Wrote, Author, Book, OrderLine Wrote.AuthorRank = 2 AND Wrote。 AuthorId = Author.AuthorID AND Book.ISBN = Wrote.ISBN AND OrderLine.ISBN = Book.ISBN GROUP BY Title, LastName, FirstName;
  • 我需要弄清楚的最后一件事是如何按在 SUM 的聚合函数中创建的总销售量以降序排列结果。
  • 查看我修改后的答案。
  • 非常感谢!这现在开始有意义了。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-02-18
  • 1970-01-01
相关资源
最近更新 更多