can i avoid window sort in below query ? And also giving explain plan.
SELECT COUNT(DISTINCT ETS_SITE_ID) OVER (PARTITION BY EXTERNAL_INVOICE_ID) COL_DISP_CNT,
SUM(TOTAL_AMOUNT) OVER (PARTITION BY EXTERNAL_INVOICE_ID) COL_DISP_TTL_AMT,
AVG(TOTAL_AMOUNT) OVER (PARTITION BY EXTERNAL_INVOICE_ID) COL_DISP_AVG_AMT
FROM TXN_INVOICE_DTLS
WHERE APPROVAL_FLAG = -1
AND EXTERNAL_INVOICE_ID IS NOT NULL
AND CIRCLE_ID=24
AND BILL_MONTH BETWEEN 201801 AND 201811;
Execution Plan
----------------------------------------------------------
Plan hash value: 2929361700
------------------------------------------------------------------------------------------------------
| Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time |
------------------------------------------------------------------------------------------------------
| 0 | SELECT STATEMENT | | 174 | 5394 | 631 (1)| 00:00:01 |
| 1 | WINDOW SORT | | 174 | 5394 | 631 (1)| 00:00:01 |
|* 2 | INDEX FAST FULL SCAN| IDX_INVOICEDTLS_EXTINVOICEID | 174 | 5394 | 630 (1)| 00:00:01 |
------------------------------------------------------------------------------------------------------
Predicate Information (identified by operation id):
---------------------------------------------------
2 - filter("APPROVAL_FLAG"=(-1) AND "BILL_MONTH">=201801 AND "CIRCLE_ID"=24 AND
"EXTERNAL_INVOICE_ID" IS NOT NULL AND "BILL_MONTH"<=201811)
Statistics
----------------------------------------------------------
0 recursive calls
0 db block gets
2397 consistent gets
0 physical reads
0 redo size
395 bytes sent via SQL*Net to client
489 bytes received via SQL*Net from client
1 SQL*Net round trips to/from client
1 sorts (memory)
0 sorts (disk)
0 rows processed