Middle — Senior
Kaip apskaičiuoti medianą SQL be įmontuotos funkcijos? Kaip suskaičiuoti eilutžių skaičių lentelėje? Ar žinote lango funkcijas?
sobes.tech AI
Atsakymas iš AI
Mediana SQL be be built-in funkcijos gali būti apskaičiuojama naudojant lango funkcijas arba subužklausas. Pavyzdžiui, lentelėje su skaitmeniniu stulpeliu value:
SELECT AVG(value) AS median FROM (
SELECT value, ROW_NUMBER() OVER (ORDER BY value) AS rn, COUNT(*) OVER () AS cnt
FROM your_table
) sub
WHERE rn IN ((cnt + 1) / 2, (cnt + 2) / 2);
Čia:
ROW_NUMBER()numeruoja eilutes didėjimo tvarka pagal reikšmę.COUNT(*) OVER ()skaičiuoja bendrą eilutžių skaičių.- Imama vidurkis iš dviejų centrinės elementų (porinėms reikšmėms) arba vieno centrinio (neporinėms reikšmėms).
Eilutžių skaičiaus skaičiavimas lentelėje yra labai paprastas:
SELECT COUNT(*) FROM your_table;
Langų funkcijos yra funkcijos, kurios atlieka skaičiavimus su susijusiomis eilutėmis, susijusiomis su dabartine eilute, ne sumažindamos rezultatą iki vienos eilutės (skirtingai nuo agregatinių funkcijų). Jos naudingos reitingavimui, judančių sumų, medianų ir pan.
Pavyzdys lango funkcijos:
SELECT value, ROW_NUMBER() OVER (ORDER BY value) AS rn FROM your_table;
Ji numeruoja eilutes didėjimo tvarka pagal value.