MySQL में Pivot Table
Pivot क्या है
Pivot table rows को columns में बदलकर cross-tab summary बनाती है — जैसे हर महीने को अपना column बनाकर sales totals। MySQL में कोई PIVOT keyword नहीं, पर आप SUM के अंदर CASE से आसानी से एक बना सकते हैं। इसे conditional aggregation कहते हैं।
शुरुआती data
-- sales table (rows) +--------+-------+--------+ | region | month | amount | +--------+-------+--------+ | North | Jan | 100 | | North | Feb | 150 | | South | Jan | 200 | +--------+-------+--------+
हम प्रति region एक row चाहते हैं, Jan और Feb columns के रूप में totals दिखाते हुए। वह pivot है।
SUM के अंदर CASE
Trick एक CASE है जो amount सिर्फ़ मेल खाते महीने को लौटाता है, वरना 0:
SUM(CASE WHEN month = 'Jan' THEN amount ELSE 0 END) AS Jan
हर region को, यह सिर्फ़ January amounts जोड़ता है। जो column चाहिए उस हर एक को ऐसा एक expression दोहराइए।
Pivot query
SELECT region,
SUM(CASE WHEN month = 'Jan' THEN amount ELSE 0 END) AS Jan,
SUM(CASE WHEN month = 'Feb' THEN amount ELSE 0 END) AS Feb
FROM sales
GROUP BY region;
GROUP BY region प्रति region एक row बनाता है, और हर CASE-SUM सही महीने का column भरता है। Rows columns बन गई हैं।
COUNT से pivot
SELECT region,
SUM(CASE WHEN status = 'paid' THEN 1 ELSE 0 END) AS paid,
SUM(CASE WHEN status = 'due' THEN 1 ELSE 0 END) AS due
FROM invoices
GROUP BY region;
Total के बजाय गिनने को, THEN में 1 डालिए। यह गिनता है कितनी rows हर category में आती हैं — count-based cross-tab, जैसे प्रति region paid बनाम due invoices।
बातें और सीमाएँ
- आप columns मैन्युअल list करते हैं। हर output column को अपना CASE चाहिए।
- Fixed categories सबसे अच्छी चलती हैं। पहले से ज्ञात महीनों या statuses को बढ़िया।
- Dynamic columns को generated SQL चाहिए। अनजान values को, query code में बनाइए।
आम गलतियाँ
- GROUP BY भूलना। इसके बिना, pivot प्रति category एक row में collapse नहीं होता।
- SUM के साथ अनजाने ELSE NULL इस्तेमाल करना। साफ़ totals को
ELSE 0इस्तेमाल कीजिए। - PIVOT keyword की उम्मीद। MySQL में कोई नहीं; CASE इस्तेमाल कीजिए।
- बेमेल column labels। हर pivot column को AS से नाम दीजिए।
सारांश
- Pivot cross-tab summary को rows को columns में बदलता है।
- MySQL में PIVOT नहीं; SUM(CASE WHEN ... THEN ... ELSE 0 END) इस्तेमाल कीजिए।
- प्रति एक row पाने को row category से GROUP BY कीजिए।
- Counts से pivot को CASE में 1 इस्तेमाल कीजिए।
- आपको हर output column list करना होगा, तो यह fixed categories को उपयुक्त।
आगे, grouping सीखिए GROUP BY और HAVING में, या conditional logic CASE expression में।
अक्सर पूछे जाने वाले प्रश्न (FAQ)
MySQL में pivot table क्या है?
MySQL में pivot table कैसे बनाऊँ?
SUM(CASE WHEN month = 'Jan' THEN amount ELSE 0 END) AS Jan, प्रति महीना दोहराया, row category से grouped। हर CASE उस column की value चुनता है।MySQL pivoting को CASE क्यों इस्तेमाल करता है?
Sums के बजाय counts से pivot कैसे करूँ?
SUM(CASE WHEN status = 'paid' THEN 1 ELSE 0 END) AS paid। यह गिनता है कितनी rows हर column category में आती हैं, count-based cross-tab देकर।