簡體   English   中英

SQL:最大表達限制的解決方法

[英]SQL: Workaround for the maximum expression limit

我正在嘗試對4000個帳戶進行一些基本的客戶細分/配置文件分析。

我想根據使用情況和使用期限對客戶進行快速細分 從策略上講,這意味着在Oracle SQL數據庫中查詢符合特定條件的Acocunt_ID。

例如,使用情況查詢將返回在過去一個月中使用時間超過100小時的帳戶子集。

擁有此帳戶列表后,我想提出一組不同的配置問題。

例如,對於有超過100個小時的使用時間的客戶:他們使用什么樣的產品? 他們成為客戶多長時間了? 推薦來源是什么?

我的基本方法是:

  1. 運行客戶群查詢
  2. 將每個細分的accountIds下載到Excel中
  3. 制定個人資料查詢
  4. 使用以下結構為每個客戶群運行概要文件查詢:

     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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM