Sobes.tech
Middle — Senior

როგორ ითვლება მედიანა SQL-ში ინტეგრირებული ფუნქციის გარეშე? როგორ ითვლება სვეტების რაოდენობა ტაბლოში? იცით თუ არა ფანჯრის ფუნქციები?

sobes.tech AI

პასუხი AI-სგან

SQL-да встроенная функциясыз медиана есептеу үшін терезе функцияларын немесе ішкі сұрауларды қолдануға болады. Мысалы, 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);

Мұнда:

  • ROW_NUMBER() мәні бойынша жолдарды өсіп келе жатқан ретімен нөмірлейді.
  • COUNT(*) OVER () жалпы жолдар санын есептейді.
  • Екі орталық элементтің орташа мәні есептеледі (жұп санды жағдайда) немесе бір орталық (таза санды жағдайда).

Кестедегі жолдар санын есептеу өте оңай:

SELECT COUNT(*) FROM your_table;

Терезе функциялары — бұл функциялар, ағымдағы жолмен байланысты жолдар жиынында есептеулер жүргізеді, нәтижені бір жолға қысқармайды (агрегаттық функциялардан айырмашылығы). Олар рангтау, қозғалыс сомалары, медианалар және т.б. үшін пайдалы.

Терезе функциясының мысалы:

SELECT value, ROW_NUMBER() OVER (ORDER BY value) AS rn FROM your_table;

Бұл value бойынша жолдарды өсіп келе жатқан ретімен нөмірлейді.