我有三个表orders
、orderdetails
和customers
。orders
表包含以下列:
ORDERID, CUSTOMERID, EMPLOYEEID, TERRITORYID,
ORDERDATE, REQUIREDDATE, SHIPPEDDATE,
SHIPVIA, FREIGHT, SHIPNAME,
SHIPADDRESS, SHIPCITY, SHIPREGION,
SHIPPOSTALCODE, SHIPCOUNTRY
orderdetails
表包含以下列:
ORDERID, PRODUCTID, UNITPRICE, QUANTITY, DISCOUNT
customers
表包含以下列:
CUSTOMERID, COMPANYNAME, CONTACTNAME,
CONTACTTITLE, ADDRESS, CITY, REGION,
POSTALCODE, COUNTRY, PHONE, FAX
我必须执行三个查询:
- 1**如果总金额大于10000,则总金额较高的订单列表(单价 * 数量 *(1-折扣))
我是这样做的:
SELECT orderid
FROM orders
JOIN orderdetails USING (orderid)
GROUP BY orderid
HAVING SUM (unitprice * quantity * (1 - discount)) > 10000;
- 2**总金额最高的订单(含折扣)
我是这样做的:
SELECT MAX (orderid),
SUM (unitprice * quantity * (1 - discount)) as price
FROM orders
JOIN orderdetails USING (orderid)
ORDER BY price DESC;
- 3**显示所有订单运费超过2000的客户的customerid和运费(运输)
我没能做到这一点
SELECT customerid,freight
FROM customers
JOIN orders USING (customerid)
HAVING Count (freight) > 2000;
我想知道我是否正确地做了#1和#2,或者有没有更好的方法来做,以及我如何解决#3。
非常感谢大家。
2条答案
按热度按时间xwbd5t1u1#
您不需要
customers
表(因为orders
表同时包含freight
和customerid
),但需要有一个GROUP BY
子句,并在SELECT
子句中聚合freight
列(可能希望使用SUM
而不是COUNT
,但您没有提供任何示例数据,因此很难判断):jv4diomz2#
示例数据如下所示:
你的3个答案如下:
x一个一个一个一个x一个一个二个一个x一个一个三个一个