SQL問題: 找median (原題link )
我的思路是先用window function排序,若行數是奇數,則取排序為(行數+1)/2的數; 若行數是偶數,則取排序為行數/2和行數/2+1的數的平均
但我用以下query在sqliteonline的PostgreSQL運行,得到錯誤訊息"CASE types record and bigint cannot be matched",看不懂這個錯誤,請問老師該如何修改? 這樣的思路有更精簡的寫法嗎?
SELECT ROUND(AVG(LAT_N), 4)
FROM (SELECT LAT_N, ROW_NUMBER() OVER(ORDER BY LAT_N) AS rnk
FROM STATION) A
WHERE rnk IN (SELECT CASE WHEN COUNT(*) % 2 != 0 THEN (COUNT(*) + 1) / 2
ELSE (COUNT(*) / 2, COUNT(*) / 2 + 1) END
FROM STATION)