SQL检索问题

时间:2010-11-21 08:54:46

标签: sql mysql aggregate-functions

我正在尝试检索以下信息: 对于平均订单金额大于1,800美元的每位客户,请列出客户名称,cust#和订单总数。

我的代码目前。

SELECT c.cname, c.`cust#`, COUNT(oi.`order#`)
FROM CUSTOMER c, `ORDER` o, `ORDER_ITEM` oi
WHERE c.`cust#` = o.`cust#` 
AND o.`order#` = oi.`order#` 
AND AVG(o.`ord_amt`) > 1800
GROUP BY c.cname, c .`cust#`

表格和字段到我的数据库

customer(cust#:char(3), cname:varchar(30), city:varchar(20))
order (order# :char(4), odate, cust#:char(3), ord_amt:decimal(10.2))
order_item( order# :char(4), item#: char(4), qty:int(11))
item(item# :char(4), unit_price:decimal(10.2))
shipment(order# :char(4), warehouse# :char(4), ship_date:date)
warehouse (warehouse#: char(4), city:varchar(20))

1 个答案:

答案 0 :(得分:0)

您应该使用JOIN表示法和HAVING子句来比较聚合;您不需要订单商品表:

SELECT c.cname, c.`cust#`, COUNT(oi.`order#`)
  FROM CUSTOMER c JOIN `ORDER` o ON c.`cust#` = o.`cust#` 
 GROUP BY c.cname, c .`cust#`
HAVING AVG(o.`ord_amt`) > 1800

(由GolezTrol按评论修正的GROUP BY和HAVING的顺序 - 谢谢;我的理由是它已经是深夜了。)