讓它成為提供的表。
| PID | 工貿部 | 型別 | 頻率 |
|---|---|---|---|
| 1 | 1 | 一個 | 3 |
| 1 | 1 | 一個 | 2 |
| 1 | 1 | 一個 | 1 |
| 1 | 1 | 乙 | 3 |
| 1 | 2 | 一個 | 4 |
| 1 | 2 | 乙 | 5 |
我想撰寫一個查詢來獲得這樣的輸出。
| PID | 工貿部 | 型別 | Max_Freq_1 | Max_Freq_2 |
|---|---|---|---|---|
| 1 | 1 | 一個 | 3 | 2 |
| 1 | 1 | 乙 | 3 | 空值 |
| 1 | 2 | 一個 | 4 | 空值 |
| 1 | 2 | 乙 | 5 | 空值 |
也就是說,給定PID, TID,的組合,Type最高和次高頻率是多少?如果表中沒有足夠數量的條目,則將第二大作為 NULL
uj5u.com熱心網友回復:
如果您的資料庫可以使用視窗函式,則可以通過 DENSE_RANK 函式計算前 2 個頻率。
SELECT PID, TID, Type
, MAX(CASE WHEN Rnk = 1 THEN Freq END) AS Max_Freq_1
, MAX(CASE WHEN Rnk = 2 THEN Freq END) AS Max_Freq_2
FROM
(
SELECT PID, TID, Type, Freq
, DENSE_RANK() OVER (PARTITION BY PID, TID, Type ORDER BY Freq DESC) AS Rnk
FROM YourTable t
) q
GROUP BY PID, TID, Type
ORDER BY PID, TID, Type
| 行程號 | 時間 | 型別 | 最大頻率_1 | 最大頻率_2 |
|---|---|---|---|---|
| 1 | 1 | 一個 | 3 | 2 |
| 1 | 1 | 乙 | 3 | 空值 |
| 1 | 2 | 一個 | 4 | 空值 |
| 1 | 2 | 乙 | 5 | 空值 |
如果 ROW_NUMBER 不可用,請嘗試此操作。
SELECT PID, TID, Type
, MAX(CASE WHEN Rnk = 1 THEN Freq END) AS Max_Freq_1
, MAX(CASE WHEN Rnk = 2 THEN Freq END) AS Max_Freq_2
FROM
(
SELECT t1.PID, t1.TID, t1.Type, t1.Freq
, COUNT(DISTINCT t2.Freq) AS Rnk
FROM YourTable t1
LEFT JOIN YourTable t2
ON t2.PID = t1.PID
AND t2.TID = t1.TID
AND t2.Type = t1.Type
AND t2.Freq >= t1.Freq
GROUP BY t1.PID, t1.TID, t1.Type, t1.Freq
) q
GROUP BY PID, TID, Type
ORDER BY PID, TID, Type
關于db<>fiddle 的演示在
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/394746.html
