我正在尝试执行将回答以下问题的查询: “2004年5月订购的产品数量是多少?按每个产品的订购数量按降序排列”
到目前为止,我已成功检索到2004年5月订购的所有产品的清单。但是,我不知道如何为每种产品进行排序。我按表达式尝试了一组(按PRODUCTNAME分组)并收到错误“Not a GROUP BY expression”(我在下面的工作查询末尾添加了“GROUP BY PRODUCTNAME”。)
这是我到目前为止的工作查询:
SELECT ORDERS.ORDERNUMBER, PRODUCTS.PRODUCTNAME, ORDERS.SHIPPEDDATE
FROM ORDERS,
PRODUCTS
WHERE SHIPPEDDATE LIKE '%MAY-04';
所以问题是这样的:我如何执行这部分查询? “按每个产品按降序排序的数量报告”
答案 0 :(得分:3)
您想要的查询如下所示:
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
。SELECT
。答案 1 :(得分:2)
首先,进行正确的连接,然后添加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'