我正在尝试显示前两个平均价格,但是我遇到了一个问题,因为我需要显示的两个列来自不同的表,当我尝试其他线程的解决方案时,连接会给我错误消息。例如:
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
答案 0 :(得分:1)
首先,学习正确的join
语法。 从不在FROM
子句中使用逗号。 始终使用JOIN
和ON
。
然后,在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