మాడ్యూల్ పాఠాలు (2/4)
విండో విధులు: ర్యాంకింగ్లు మరియు ప్రతి సమూహ గణనలు
విండో ఫంక్షన్ అనేది "వరుసల సమూహం"పై పనిచేసే ఒక ఫంక్షన్
(window) కానీ — GROUP BY వలె కాకుండా — ** సంఖ్యను తగ్గించదు
అడ్డు వరుసలు**: విండోపై లెక్కించబడిన విలువ ప్రతి అడ్డు వరుసకు జోడించబడుతుంది
తుది ఫలితం.
ఇది ర్యాంకింగ్లు, ప్రగతిశీల నంబరింగ్, శాతాల కోసం సరైన సాధనం
సమూహం మొత్తం మీద, మరియు ఇబ్బందికరమైన అనేక ఇతర కార్యకలాపాలు లేదా
GROUP BYతో అసాధ్యం.
వాక్యనిర్మాణం: function() OVER (…)
ROW_NUMBER() OVER (PARTITION BY colonna ORDER BY colonna2)భాగాలు:
PARTITION BY— "సమూహాలను" నిర్వచిస్తుంది (GROUP BYవంటి, కానీ అడ్డు వరుసలు విడిగా ఉండండి);ORDER BYలోపలOVER(…)— లోపల క్రమాన్ని నిర్వచిస్తుంది విభజన.
OVER () (ఖాళీ కుండలీకరణాలు) అంటే "మొత్తం పట్టిక ఒకే విండో వలె".
"మొత్తం శాతం" వంటి గణనలకు ఉపయోగపడుతుంది.
ర్యాంకింగ్ విధులు
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_NUMBER | 1, 2, 3, 4 (ఎల్లప్పుడూ ప్రత్యేకమైనది) |
RANK | 1, 1, 3, 4 (బంధాలు ఒక స్థానాన్ని పంచుకుంటాయి, ** "ఖాళీలను" వదిలివేస్తుంది**) |
DENSE_RANK | 1, 1, 2, 3 (బంధాలు ఒక స్థానాన్ని పంచుకుంటాయి, ఖాళీలు లేకుండా) |
ఉదాహరణ: ప్రతి వర్గానికి ఉత్పత్తి ర్యాంకింగ్
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 నుండి పునఃప్రారంభించబడుతుంది మరియు అవరోహణ ద్వారా ఆర్డర్ చేయబడుతుంది
ధర: మీరు ఉత్పత్తుల ర్యాంకింగ్ను లోపు ప్రతి వర్గంలో, ఒకదానిలో పొందుతారు
కాల్చారు.
ప్రోగ్రెసివ్ నంబరింగ్
-- 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, మొదలైనవి ఉంటాయి.
దీనిని ప్రయత్నించండి
ప్రతి ఉత్పత్తి ప్రదర్శన పేరు, category_id, ధర మరియు ర్యాంక్ (వర్గంలో ధరను అవరోహణ చేయడం ద్వారా ర్యాంక్; RANK ఉపయోగించండి). ఆరోహణ వర్గం_ఐడి మరియు ఆరోహణ ర్యాంక్ ద్వారా ఆర్డర్ చేయండి.
సూచనను చూపించు
వర్గం_ఐడి సమూహాల వారీగా విభజన, సమూహంలోని ధర DESC ఆర్డర్ల ద్వారా ఆర్డర్ చేయండి.
3 ప్రయత్నాల తర్వాత పరిష్కారం లభిస్తుంది
వ్యాయామం సమీక్షించండి
ప్రతి ఆర్డర్ షో id, customer_id, order_at మరియు row_num (ప్రతి కస్టమర్కు ప్రోగ్రెసివ్ ROW_NUMBER, ఆర్డర్_ని ఆరోహణ చేయడం ద్వారా ఆర్డర్ చేయబడింది). customer_id మరియు row_num ద్వారా ఆర్డర్ చేయండి.
సూచనను చూపించు
విభజనలో ROW_NUMBER ఎల్లప్పుడూ ప్రత్యేకంగా ఉంటుంది.
3 ప్రయత్నాల తర్వాత పరిష్కారం లభిస్తుంది