[英]SQL: Workaround for the maximum expression limit
我正在嘗試對4000個帳戶進行一些基本的客戶細分/配置文件分析。
我想根據使用情況和使用期限對客戶進行快速細分 。 從策略上講,這意味着在Oracle SQL數據庫中查詢符合特定條件的Acocunt_ID。
例如,使用情況查詢將返回在過去一個月中使用時間超過100小時的帳戶子集。
擁有此帳戶列表后,我想提出一組不同的配置問題。
例如,對於有超過100個小時的使用時間的客戶:他們使用什么樣的產品? 他們成為客戶多長時間了? 推薦來源是什么?
我的基本方法是:
使用以下結構為每個客戶群運行概要文件查詢:
Select * From fooo where Account_ID in ('00001','00002','00003')
挑戰在於,客戶群查詢返回的結果超過1000個,因此我必須手動替換1000個集合中不同批次的account_IDs。這是必需的,因為Oracle SQL的表達式限制為1000個。
另一種選擇是將客戶細分查詢與概要文件查詢組合在一起,但這會使查詢需要一定的執行時間。
所以。 問題是,有沒有一種有效的方法可以在Oracle SQL中創建和填充臨時表,我可以使用該表來轉儲客戶群查詢結果,然后將這些結果放入概要文件查詢中,以確保它們更有效地運行?
將使用ROW_NUMBER()窗口聚合函數根據AccountID的ASCENDING順序分配RowID,然后使用WHERE子句處理n個可接受的行:
SELECT DT1.*
FROM (SELECT f1.*
, ROW_NUMBER() OVER (ORDER BY F1.AccountID) AS RowID_
FROM foo f1
) DT1
WHERE DT1.RowID_ BETWEEN 1 and /* n */
;
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.