PostgreSQL Summary Stats और Window Functions
Michel Semaan
Data Scientist
क्वेरी
WITH Discus_Gold AS (
SELECT
Year, Event, Country AS Champion
FROM Summer_Medals
WHERE
Year IN (2004, 2008, 2012)
AND Gender = 'Men' AND Medal = 'Gold'
AND Event IN ('Discus Throw', 'Triple Jump')
AND Gender = 'Men')
SELECT
Year, Event, Champion,
LAG(Champion) OVER
(ORDER BY Event ASC, Year ASC) AS Last_Champion
FROM Discus_Gold
ORDER BY Event ASC, Year ASC;
परिणाम
| Year | Event | Champion | Last_Champion |
|------|--------------|----------|---------------|
| 2004 | Discus Throw | LTU | null |
| 2008 | Discus Throw | EST | LTU |
| 2012 | Discus Throw | GER | EST |
| 2004 | Triple Jump | SWE | GER |
| 2008 | Triple Jump | POR | SWE |
| 2012 | Triple Jump | USA | POR |
Event Discus Throw से Triple Jump में बदलता है, तो LAG ने null की जगह Discus Throw का पिछला विजेता ला दियाPARTITION BY किसी कॉलम के यूनिक मानों के आधार पर टेबल को भागों में बाँटता हैROW_NUMBER हर पार्टिशन के लिए रीसेट होगाLAG तभी पिछली वैल्यू लाएगा जब पिछली पंक्ति उसी पार्टिशन में होक्वेरी
WITH Discus_Gold AS (...)
SELECT
Year, Event, Champion,
LAG(Champion) OVER
(PARTITION BY Event
ORDER BY Event ASC, Year ASC) AS Last_Champion
FROM Discus_Gold
ORDER BY Event ASC, Year ASC;
परिणाम
| Year | Event | Champion | Last_Champion |
|------|--------------|----------|---------------|
| 2004 | Discus Throw | LTU | null |
| 2008 | Discus Throw | EST | LTU |
| 2012 | Discus Throw | GER | EST |
| 2004 | Triple Jump | SWE | null |
| 2008 | Triple Jump | POR | SWE |
| 2012 | Triple Jump | USA | POR |
| Year | Country | Event | Row_N |
|------|---------|----------------------|-------|
| 2008 | CHN | + 78KG (Heavyweight) | 1 |
| 2008 | CHN | - 49 KG | 2 |
| ... | ... | ... | ... |
| 2008 | JPN | 48 - 55KG | 27 |
| 2008 | JPN | 48 - 55KG | 28 |
| ... | ... | ... | ... |
| 2012 | CHN | +75KG | 32 |
| 2012 | CHN | - 49 KG | 33 |
| ... | ... | ... | ... |
| 2012 | JPN | +75KG | 51 |
| 2012 | JPN | - 49 KG | 52 |
| ... | ... | ... | ... |
ROW_NUMBER हर Year और Country पर रीसेट होना चाहिएक्वेरी
WITH Country_Gold AS (
SELECT
DISTINCT Year, Country, Event
FROM Summer_Medals
WHERE
Year IN (2008, 2012)
AND Country IN ('CHN', 'JPN')
AND Gender = 'Women' AND Medal = 'Gold')
SELECT
Year, Country, Event,
ROW_NUMBER() OVER (PARTITION BY Year, Country)
FROM Country_Gold;
परिणाम
| Year | Country | Event | Row_N |
|------|---------|----------------------|-------|
| 2008 | CHN | + 78KG (Heavyweight) | 1 |
| 2008 | CHN | - 49 KG | 2 |
| ... | ... | ... | ... |
| 2008 | JPN | 48 - 55KG | 1 |
| 2008 | JPN | 48 - 55KG | 2 |
| ... | ... | ... | ... |
| 2012 | CHN | +75KG | 1 |
| 2012 | CHN | - 49 KG | 2 |
| ... | ... | ... | ... |
| 2012 | JPN | +75KG | 1 |
| 2012 | JPN | - 49 KG | 2 |
| ... | ... | ... | ... |
PostgreSQL Summary Stats और Window Functions