我試圖從結果中計算平均值然后加入它們。
我的主要查詢在這里:
SELECT
A.USERNAME,
A.TOTAL,
A.MATH
FROM
(SELECT
B.USERNAME,
COUNT(CLASS_ID) TOTAL,
SUM(CASE WHEN ROOM_ID = '1001' THEN 1 ELSE 0 END) AS MATH
FROM A LESSON, STUDENT B
WHERE
A.USERNAME = B.USERNAME
AND A.CREATED_DATE >= TO_DATE(:created_date ,'YYYYMMDDHH24MISS')
AND A.CREATED_DATE < TO_DATE(:created_end_date ,'YYYYMMDDHH24MISS')
GROUP BY B.USERNAME
ORDER BY TOTAL DESC) A
它給了我:
|USERNAME|TOTAL|MATH|
|John | 480|159 |
|Dave | 360|120 |
|Sarah | 540|130 |
|James | 361|185 |
|Kim | 640|92 |
|Matt | 11 |2 |
|Jane | 8 |1 |
但我想變成這樣:
|USERNAME|TOTAL|AVG_FROM_TOTAL|MATH|AVG_FROM_MATH|
|John | 480| 476 | 159| 137 |
|Dave | 360| 476 | 120| 137 |
|Sarah | 540| 476 | 130| 137 |
|James | 361| 476 | 185| 137 |
|Kim | 640| 476 | 92| 137 |
它是這樣手動計算的
- (480 360 540 361 640/5 = 476) /會被移除用戶Matt和Jane因為太低別人/
- (159 120 130 185 92/5 = 137) /移除馬特和簡結果/
如何創建要計算的查詢?是否可以從結果中計算平均值?
uj5u.com熱心網友回復:
就這么簡單:
SELECT A.USERNAME
, A.TOTAL
, AVG(A.TOTAL) OVER () AS avg_total
, A.MATH
, AVG(A.MATH) OVER () AS avg_math
FROM (your derived table) A
WHERE A.TOTAL > 20
;
這些是視窗函式。
隨意從派生表中或在外部 WHERE 子句(您可以添加)中的派生表之后洗掉任何您想要的行。
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/370174.html
