试图显示前2个平均价格

时间:2016-09-28 12:25:11

标签: sql oracle-sqldeveloper

我正在尝试显示前两个平均价格,但是我遇到了一个问题,因为我需要显示的两个列来自不同的表,当我尝试其他线程的解决方案时,连接会给我错误消息。例如:

Customer Table          Order Table
CID,CNAME               OID,CID,OPRICE    
1,  JOHN                 1,  1,  2.50
2,  JEFF                 2,  1,  3.40
3,  ROB                  3,  2,  4.20
                         4,  3,  3.50

这是我到目前为止所得到的,但它显示的不仅仅是前2名。

SELECT CNAME,AVG(OPRICE)
FROM CUSTOMER, ORDER
WHERE CUSTOMER.CID=ORDER.CID
GROUP BY CNAME;

我追求的结果将是:

CNAME,AVG(OPRICE)
JEFF,  4.20
ROB,   3.50

2 个答案:

答案 0 :(得分:1)

首先,学习正确的join语法。 从不FROM子句中使用逗号。 始终使用JOINON

然后,在Oracle 12C +中,您可以执行以下操作:

SELECT c.CNAME, AVG(o.OPRICE)
FROM CUSTOMER c JOIN
     ORDER o
     ON c.CID = o.CID
GROUP BY c.CNAME
ORDER BY AVG(o.OPRICE) DESC
FETCH FIRST 2 ROWS ONLY;

早期版本需要子查询:

SELECT CNAME, avg_oprice
FROM (SELECT c.CNAME, AVG(o.OPRICE) as avg_oprice
      FROM CUSTOMER c JOIN
           ORDER o
           ON c.CID = o.CID
      GROUP BY c.CNAME
      ORDER BY AVG(o.OPRICE) DESC
     ) c
WHERE rownum <= 2;

答案 1 :(得分:0)

最新的Oracle版本有FETCH FIRST

SELECT CNAME,AVG(OPRICE) as AVGPRICE
FROM CUSTOMER, ORDER
WHERE CUSTOMER.CID=ORDER.CID
GROUP BY CNAME
ORDER BY AVGPRICE DESC
FETCH FIRST 2 ROWS ONLY