2016-02-28 130 views
1

我有2個表。 ABC(CID(PK),CNAME) 順序(ORDER_ID(PK),CID(FK),number_of_rentals)oracle中的前10行

我想根據租賃的數量來獲取前10名顧客。

SELECT cid, sum(no_rentals) as sum 
FROM orders 
group by cid, no_rentals 
order by no_rentals desc; 

如何使用ROWNUM功能在上面的查詢來獲取所需的輸出

+2

你確定要在'no_rentals'列中使用SUM?*和* GROUP BY嗎? – Dai

+0

@Dai我想根據租金數量取得前10名客戶,所以我認爲我必須這樣做 –

+0

您只需要'GROUP BY''cid'列,您不會按'no_rentals'列進行分組,因爲它對每個'cid'都是'SUM'。我建議你閱讀聚合函數與GROUP BY語句一起使用時的工作方式。 – Dai

回答

2

只是包裝您的查詢中:

SELECT * FROM (your_query) WHERE ROWNUM <= 10; 

但是,您的查詢看起來並不像它會做你想要的,因爲GROUP BY no_renalts將意味着每個不同的no_rentals值將在其自己的組中,並且您不會將每個客戶的值相加,因此您可能不希望將其包含在GROUP BY中。另外,如果你想通過出租總數訂購,那麼你要ORDER BY SUM(no_rentals)(或別名)是這樣的:

SELECT cid, 
     SUM(no_rentals) as total_no_rentals 
FROM  orders 
GROUP BY cid 
ORDER BY total_no_rentals DESC; 

那麼你可以申請該行的限制,這樣的:

SELECT * 
FROM (
    SELECT cid, 
      SUM(no_rentals) as total_no_rentals 
    FROM  orders 
    GROUP BY cid 
    ORDER BY total_no_rentals DESC 
) 
WHERE ROWNUM <= 10;