如何按产品对我的 sql 报表进行排序以及报告数量

How to sort my sql statement by products as well as report a quantity

我正在尝试执行将回答以下问题的查询: "What products in what quantity were ordered in May 2004? Report by quantity ordered sorted for each product in descending order"

到目前为止,我已成功检索到2004年5月订购的所有产品的列表。但是,我不知道如何对每个产品进行排序。我尝试了按表达式分组(按 PRODUCTNAME 分组)并得到错误“不是 GROUP BY 表达式”(我在下面的工作查询的末尾添加了 "GROUP BY PRODUCTNAME"。)

这是我到目前为止的工作查询:

SELECT ORDERS.ORDERNUMBER, PRODUCTS.PRODUCTNAME, ORDERS.SHIPPEDDATE
FROM ORDERS,
     PRODUCTS
WHERE SHIPPEDDATE LIKE '%MAY-04';

这是我的输出图像:

所以问题是:如何执行这部分查询? "Report by quantity ordered sorted for each product in descending order"

首先,进行适当的连接,然后添加 GROUP BY:

SELECT o.ORDERNUMBER, p.PRODUCTNAME, SUM(od.quantity)
FROM ORDERS o
  JOIN order_details od ON o.ORDERNUMBER= od.ORDERNUMBER
  JOIN PRODUCTS p ON od.ProductCode = p.ProductCode
WHERE SHIPPEDDATE LIKE '%MAY-04'
GROUP BY o.ORDERNUMBER, p.PRODUCTNAME

我不太了解 Oracle,但我想你可以做类似的事情

WHERE YEAR(SHIPPEDDATE) = 2004 and MONTH(SHIPPEDDATE) = 5

或者,如 Gordon Linoff 的回答

WHERE SHIPPEDDATE >= DATE '2004-05-01' AND SHIPPEDDATE < DATE '2004-06-01'

您想要的查询如下所示:

SELECT p.PRODUCTNAME, COUNT(*)
FROM ORDERS o JOIN
     PRODUCTS p
     ON o.PRODUCTID = p.PRODUCTID
WHERE o.SHIPPEDDATE >= DATE '2004-05-01' AND SHIPPEDDATE < DATE '2004-06-01'
GROUP BY p.PRODUCTNAME;

备注:

  • 学习使用明确的 JOIN 语法。简单规则:从不FROM 子句中使用逗号。 总是 使用JOIN.
  • 对于日期比较,请使用日期的内置函数和运算符。不要不必要地转换为字符串。
  • 我对日期常量的偏好是 ISO 标准 YYYY-MM-DD 格式,而不是 Oracle 的默认格式。
  • 您需要聚合,但在 SELECT 中保留额外的列。