ప్రధాన కంటెంట్‌కు వెళ్లండి
మాడ్యూల్ 7 · 4లో పాఠం 2కోర్సులో 26/57~14 min
మాడ్యూల్ పాఠాలు (2/4)

విండో విధులు: ర్యాంకింగ్‌లు మరియు ప్రతి సమూహ గణనలు

విండో ఫంక్షన్ అనేది "వరుసల సమూహం"పై పనిచేసే ఒక ఫంక్షన్ (window) కానీ — GROUP BY వలె కాకుండా — ** సంఖ్యను తగ్గించదు అడ్డు వరుసలు**: విండోపై లెక్కించబడిన విలువ ప్రతి అడ్డు వరుసకు జోడించబడుతుంది తుది ఫలితం.

ఇది ర్యాంకింగ్‌లు, ప్రగతిశీల నంబరింగ్, శాతాల కోసం సరైన సాధనం సమూహం మొత్తం మీద, మరియు ఇబ్బందికరమైన అనేక ఇతర కార్యకలాపాలు లేదా GROUP BYతో అసాధ్యం.

వాక్యనిర్మాణం: function() OVER (…)

SQL
ROW_NUMBER() OVER (PARTITION BY colonna ORDER BY colonna2)

భాగాలు:

  • PARTITION BY — "సమూహాలను" నిర్వచిస్తుంది (GROUP BY వంటి, కానీ అడ్డు వరుసలు విడిగా ఉండండి);
  • ORDER BY లోపల OVER(…) — లోపల క్రమాన్ని నిర్వచిస్తుంది విభజన.

OVER () (ఖాళీ కుండలీకరణాలు) అంటే "మొత్తం పట్టిక ఒకే విండో వలె". "మొత్తం శాతం" వంటి గణనలకు ఉపయోగపడుతుంది.

ర్యాంకింగ్ విధులు

SQL
ROW_NUMBER() OVER (PARTITION BY p ORDER BY o)
RANK()       OVER (PARTITION BY p ORDER BY o)
DENSE_RANK() OVER (PARTITION BY p ORDER BY o)

తేడాలు (100, 100, 90, 80 విలువలతో):

ఫంక్షన్పదవులు
ROW_NUMBER1, 2, 3, 4 (ఎల్లప్పుడూ ప్రత్యేకమైనది)
RANK1, 1, 3, 4 (బంధాలు ఒక స్థానాన్ని పంచుకుంటాయి, ** "ఖాళీలను" వదిలివేస్తుంది**)
DENSE_RANK1, 1, 2, 3 (బంధాలు ఒక స్థానాన్ని పంచుకుంటాయి, ఖాళీలు లేకుండా)

ఉదాహరణ: ప్రతి వర్గానికి ఉత్పత్తి ర్యాంకింగ్

SQL
SELECT name,
       category_id,
       price,
       RANK() OVER (PARTITION BY category_id ORDER BY price DESC) AS rank
FROM   products
ORDER BY category_id, rank;

ప్రతి category_id కోసం RANK 1 నుండి పునఃప్రారంభించబడుతుంది మరియు అవరోహణ ద్వారా ఆర్డర్ చేయబడుతుంది ధర: మీరు ఉత్పత్తుల ర్యాంకింగ్‌ను లోపు ప్రతి వర్గంలో, ఒకదానిలో పొందుతారు కాల్చారు.

ప్రోగ్రెసివ్ నంబరింగ్

SQL
-- Progressive order number for each customer:
SELECT id,
       customer_id,
       ordered_at,
       ROW_NUMBER() OVER (PARTITION BY customer_id ORDER BY ordered_at) AS row_num
FROM   orders
ORDER BY customer_id, row_num;

ప్రతి కస్టమర్ మొదటి ఆర్డర్‌లో row_num = 1, రెండవది 2, మొదలైనవి ఉంటాయి.

దీనిని ప్రయత్నించండి

వ్యాయామం#sql.m7.l2.e1
ప్రయత్నాలు: 0లోడ్ అవుతోంది...

ప్రతి ఉత్పత్తి ప్రదర్శన పేరు, category_id, ధర మరియు ర్యాంక్ (వర్గంలో ధరను అవరోహణ చేయడం ద్వారా ర్యాంక్; RANK ఉపయోగించండి). ఆరోహణ వర్గం_ఐడి మరియు ఆరోహణ ర్యాంక్ ద్వారా ఆర్డర్ చేయండి.

ఎడిటర్ లోడ్ అవుతోంది…
సూచనను చూపించు

వర్గం_ఐడి సమూహాల వారీగా విభజన, సమూహంలోని ధర DESC ఆర్డర్‌ల ద్వారా ఆర్డర్ చేయండి.

3 ప్రయత్నాల తర్వాత పరిష్కారం లభిస్తుంది

వ్యాయామం సమీక్షించండి

వ్యాయామం#sql.m7.l2.e2
ప్రయత్నాలు: 0లోడ్ అవుతోంది...

ప్రతి ఆర్డర్ షో id, customer_id, order_at మరియు row_num (ప్రతి కస్టమర్‌కు ప్రోగ్రెసివ్ ROW_NUMBER, ఆర్డర్_ని ఆరోహణ చేయడం ద్వారా ఆర్డర్ చేయబడింది). customer_id మరియు row_num ద్వారా ఆర్డర్ చేయండి.

ఎడిటర్ లోడ్ అవుతోంది…
సూచనను చూపించు

విభజనలో ROW_NUMBER ఎల్లప్పుడూ ప్రత్యేకంగా ఉంటుంది.

3 ప్రయత్నాల తర్వాత పరిష్కారం లభిస్తుంది