MySQL பிவோட்: நெடுவரிசைகளுக்கு சுழலும் வரிசைகள்

Mysql Pivot Rotating Rows Columns



ஒரு தரவுத்தள அட்டவணை பல்வேறு வகையான தரவுகளை சேமிக்க முடியும் மற்றும் சில நேரங்களில் நாம் வரிசை நிலை தரவை நெடுவரிசை தரவுகளாக மாற்ற வேண்டும். PIVOT () செயல்பாட்டைப் பயன்படுத்தி இந்த சிக்கலை தீர்க்க முடியும். இந்த செயல்பாடு ஒரு அட்டவணையின் வரிசைகளை நெடுவரிசை மதிப்புகளாக சுழற்ற பயன்படுகிறது. ஆனால் இந்த செயல்பாடு ஆரக்கிள் அல்லது SQL சர்வர் போன்ற மிகக் குறைந்த தரவுத்தள சேவையகங்களால் ஆதரிக்கப்படுகிறது. MySQL தரவுத்தள அட்டவணையில் அதே பணியை நீங்கள் செய்ய விரும்பினால், வரிசைகளை நெடுவரிசைகளாக சுழற்ற CASE அறிக்கையைப் பயன்படுத்தி நீங்கள் தேர்ந்தெடுக்கப்பட்ட வினவலை எழுத வேண்டும். கட்டுரை தொடர்புடைய MySQL தரவுத்தள அட்டவணைகளுக்குள் PIVOT () செயல்பாட்டின் பணியைச் செய்வதற்கான வழியைக் காட்டுகிறது.

முன்நிபந்தனை:

நீங்கள் ஒரு தரவுத்தளத்தையும் சில தொடர்புடைய அட்டவணைகளையும் உருவாக்க வேண்டும், அங்கு ஒரு அட்டவணையின் வரிசைகள் PIVOT () செயல்பாடு போன்ற நெடுவரிசைகளாக மாற்றப்படும். 'என்ற தரவுத்தளத்தை உருவாக்க பின்வரும் SQL அறிக்கைகளை இயக்கவும். unidb 'மற்றும்' என்ற மூன்று அட்டவணைகளை உருவாக்கவும் மாணவர்கள் ',' படிப்புகள் 'மற்றும்' விளைவாக ' மாணவர்கள் மற்றும் விளைவாக அட்டவணைகள் ஒன்றுக்கு மேற்பட்ட உறவுகளுடன் தொடர்புடையதாக இருக்கும் படிப்புகள் மற்றும் முடிவுகள் அட்டவணைகள் இங்கே ஒன்றுக்கு மேற்பட்ட உறவுகளுடன் தொடர்புடையதாக இருக்கும். இன் உருவாக்க அறிக்கையை விளைவாக அட்டவணையில் புலங்களுக்கான இரண்டு வெளிநாட்டு முக்கிய தடைகள் உள்ளன, std_id , மற்றும் நிச்சயமாக_ஐடி .







தரவுத்தள யுனிடிபியை உருவாக்கவும்;
யூனிடிபி பயன்படுத்தவும்;

அட்டவணை மாணவர்களை உருவாக்குங்கள்(
ஐடிINT முதன்மை கீ,
பெயர் varchar(ஐம்பது)பூஜ்யம் அல்ல,
துறை VARCHAR(பதினைந்து)பூஜ்யம் இல்லை);

அட்டவணை படிப்புகளை உருவாக்கவும்(
நிச்சயமாக_ஐடி VARCHAR(இருபது)முதன்மை கீ,
பெயர் varchar(ஐம்பது)பூஜ்யம் அல்ல,
கடன் சிறியதாக இல்லை);

அட்டவணை முடிவை உருவாக்கவும்(
std_id முற்றிலும் இல்லை,
நிச்சயமாக_ஐடி VARCHAR(இருபது)பூஜ்யம் அல்ல,
குறி_ வகை VARCHAR(இருபது)பூஜ்யம் அல்ல,
மதிப்பெண்கள் சிறியவை அல்ல,
வெளிநாட்டு கீ(std_id)மாணவர்களைக் குறிக்கிறது(ஐடி),
வெளிநாட்டு கீ(நிச்சயமாக_ஐடி)குறிப்பு படிப்புகள்(நிச்சயமாக_ஐடி),
முதன்மை கீ(std_id, course_id, mark_type));

சில பதிவுகளைச் செருகவும் மாணவர்கள், படிப்புகள் மற்றும் முடிவு அட்டவணைகள். அட்டவணையை உருவாக்கும் போது நிர்ணயிக்கப்பட்ட கட்டுப்பாடுகளின் அடிப்படையில் மதிப்புகள் அட்டவணையில் செருகப்பட வேண்டும்.



மாணவர்களின் மதிப்புகளை உள்ளிடவும்
( '1937463','ஹார்பர் லீ','CSE'),
( '1937464','கார்சியா மார்க்வெஸ்','CSE'),
( '1937465','ஃபோர்ஸ்டர், ஈ.எம்.','CSE'),
( '1937466','ரால்ப் எலிசன்','CSE');

படிப்புகளின் மதிப்புகளை உள்ளிடவும்
( 'CSE-401','பொருள் சார்ந்த நிரலாக்கம்',3),
( 'CSE-403','தரவு அமைப்பு',2),
( 'CSE-407','யூனிக்ஸ் புரோகிராமிங்',2);

முடிவுகளுக்குள் சேர்க்கவும்
( '1937463','CSE-401','உள் தேர்வு',பதினைந்து),
( '1937463','CSE-401','இடைநிலை தேர்வு',இருபது),
( '1937463','CSE-401','இறுதி தேர்வு',35),
( '1937464','CSE-403','உள் தேர்வு',17),
( '1937464','CSE-403','இடைநிலை தேர்வு',பதினைந்து),
( '1937464','CSE-403','இறுதி தேர்வு',30),
( '1937465','CSE-401','உள் தேர்வு',18),
( '1937465','CSE-401','இடைநிலை தேர்வு',2. 3),
( '1937465','CSE-401','இறுதி தேர்வு',38),
( '1937466','CSE-407','உள் தேர்வு',இருபது),
( '1937466','CSE-407','இடைநிலை தேர்வு',22),
( '1937466','CSE-407','இறுதி தேர்வு',40);

இங்கே, விளைவாக அட்டவணையில் பல அதே மதிப்புகள் உள்ளன std_id , குறி_ வகை மற்றும் நிச்சயமாக_ஐடி ஒவ்வொரு வரிசையிலும் உள்ள நெடுவரிசைகள். தரவை மிகவும் ஒழுங்கமைக்கப்பட்ட வடிவத்தில் காண்பிப்பதற்காக இந்த வரிசைகளை இந்த அட்டவணையின் நெடுவரிசைகளாக மாற்றுவது இந்த டுடோரியலின் அடுத்த பகுதியில் காட்டப்பட்டுள்ளது.



CASE அறிக்கையைப் பயன்படுத்தி நெடுவரிசைகளுக்கு வரிசைகளைச் சுழற்று:

அனைத்து பதிவுகளையும் காண்பிக்க பின்வரும் எளிய தேர்வு அறிக்கையை இயக்கவும் விளைவாக மேசை.





தேர்ந்தெடுக்கவும்*முடிவிலிருந்து;

வெளியீடு மூன்று படிப்புகளின் மூன்று தேர்வுகளுக்கான நான்கு மாணவர்களின் மதிப்பெண்களைக் காட்டுகிறது. எனவே மதிப்புகள் std_id , நிச்சயமாக_ஐடி மற்றும் குறி_ வகை வெவ்வேறு மாணவர்கள், படிப்புகள் மற்றும் தேர்வு வகைகளுக்கு பல முறை மீண்டும் மீண்டும் செய்யப்படுகிறது.



CASE அறிக்கையைப் பயன்படுத்தி SELECT வினவலை மிகவும் திறமையாக எழுத முடிந்தால் வெளியீடு மிகவும் படிக்கக்கூடியதாக இருக்கும். CASE அறிக்கையுடன் பின்வரும் SELECT வரிசைகளின் தொடர்ச்சியான மதிப்புகளை நெடுவரிசை பெயர்களாக மாற்றும் மற்றும் அட்டவணைகளின் உள்ளடக்கத்தை பயனருக்கு மிகவும் புரிந்துகொள்ளக்கூடிய வடிவத்தில் காண்பிக்கும்.

Result.std_id, result.course_id ஐத் தேர்ந்தெடுக்கவும்,
அதிகபட்சம்(முடிவு. Mark_type ='உள் தேர்வு'பின்னர் முடிவு.மார்க்குகள் முடிவடைகின்றன) 'உள் தேர்வு',
அதிகபட்சம்(முடிவு. Mark_type ='இடைநிலை தேர்வு'பின்னர் முடிவு.மார்க்குகள் முடிவடைகின்றன) 'இடைநிலை தேர்வு',
அதிகபட்சம்(முடிவு. Mark_type ='இறுதி தேர்வு'பின்னர் முடிவு.மார்க்குகள் முடிவடைகின்றன) 'இறுதி தேர்வு'
முடிவிலிருந்து
முடிவு. Std_id, result.course_id மூலம் வாருங்கள்
விளைவாக ஆர்டர் செய்யவும். Std_id, result.course_id ASC;

முந்தைய வெளியீட்டை விட படிக்கக்கூடிய மேலே உள்ள அறிக்கையை இயக்கிய பின் பின்வரும் வெளியீடு தோன்றும்.

CASE மற்றும் SUM () ஐப் பயன்படுத்தி நெடுவரிசைகளுக்கு வரிசைகளைச் சுழற்றுங்கள்:

அட்டவணையில் இருந்து ஒவ்வொரு மாணவரின் ஒவ்வொரு பாடத்தின் மொத்த எண்ணிக்கையை நீங்கள் கணக்கிட விரும்பினால், நீங்கள் மொத்த செயல்பாட்டைப் பயன்படுத்த வேண்டும் SUM () மூலம் குழு std_id மற்றும் நிச்சயமாக_ஐடி CASE அறிக்கையுடன். பின்வரும் வினவல் முந்தைய வினவலை SUM () செயல்பாடு மற்றும் GROUP BY மூலம் மாற்றியமைப்பதன் மூலம் உருவாக்கப்பட்டது.

Result.std_id, result.course_id ஐத் தேர்ந்தெடுக்கவும்,
அதிகபட்சம்(முடிவு. Mark_type ='உள் தேர்வு'பின்னர் முடிவு.மார்க்குகள் முடிவடைகின்றன) 'உள் தேர்வு',
அதிகபட்சம்(முடிவு. Mark_type ='இடைநிலை தேர்வு'பின்னர் முடிவு.மார்க்குகள் முடிவடைகின்றன) 'இடைநிலை தேர்வு',
அதிகபட்சம்(முடிவு. Mark_type ='இறுதி தேர்வு'பின்னர் முடிவு.மார்க்குகள் முடிவடைகின்றன) 'இறுதி தேர்வு',
தொகை(முடிவு.மார்க்குகள்) எனமொத்தம்
முடிவிலிருந்து
முடிவு. Std_id, result.course_id மூலம் வாருங்கள்
விளைவாக ஆர்டர் செய்யவும். Std_id, result.course_id ASC;

வெளியீடு பெயரிடப்பட்ட ஒரு புதிய நெடுவரிசையைக் காட்டுகிறது மொத்தம் ஒவ்வொரு குறிப்பிட்ட மாணவர் பெற்ற ஒவ்வொரு பாடத்தின் அனைத்து தேர்வு வகைகளின் மதிப்பெண்களின் கூட்டுத்தொகையை அது காட்டுகிறது.

பல அட்டவணையில் நெடுவரிசைகளுக்கு வரிசைகளை சுழற்று:

முந்தைய இரண்டு வினவல்கள் இதற்குப் பயன்படுத்தப்படுகின்றன விளைவாக மேசை. இந்த அட்டவணை மற்ற இரண்டு அட்டவணைகளுடன் தொடர்புடையது. இவை மாணவர்கள் மற்றும் படிப்புகள் . மாணவர் ஐடிக்கு பதிலாக மாணவர் பெயரையும் பாடநெறி ஐடிக்கு பதிலாக பாடப்பெயரையும் காட்ட விரும்பினால், நீங்கள் மூன்று தொடர்புடைய அட்டவணையைப் பயன்படுத்தி தேர்வு வினவலை எழுத வேண்டும், மாணவர்கள் , படிப்புகள் மற்றும் விளைவாக . பின்வரும் SELECT வினவல் FORM பிரிவுக்குப் பிறகு மூன்று அட்டவணை பெயர்களைச் சேர்ப்பதன் மூலமும், மூன்று அட்டவணைகளிலிருந்து தரவை மீட்டெடுப்பதற்கும் முந்தைய SELECT வினவல்களை விட பொருத்தமான வெளியீட்டை உருவாக்குவதற்கும் பொருத்தமான விதிமுறைகளை அமைப்பதன் மூலம் உருவாக்கப்பட்டது.

மாணவர்களைத் தேர்ந்தெடுக்கவும்என 'மாணவன் பெயர்'படிப்புகள். பெயர்என 'படிப்பின் பெயர்',
அதிகபட்சம்(முடிவு. Mark_type ='உள் தேர்வு'பின்னர் முடிவு.மார்க்குகள் முடிவடைகின்றன) 'CT',
அதிகபட்சம்(முடிவு. Mark_type ='இடைநிலை தேர்வு'பின்னர் முடிவு.மார்க்குகள் முடிவடைகின்றன) 'நடு',
அதிகபட்சம்(முடிவு. Mark_type ='இறுதி தேர்வு'பின்னர் முடிவு.மார்க்குகள் முடிவடைகின்றன) 'இறுதி',
தொகை(முடிவு.மார்க்குகள்) எனமொத்தம்
மாணவர்களிடமிருந்து, படிப்புகள், முடிவு
எங்கே முடிவு. Std_id = students.id மற்றும் result.course_id = courses.course_id
முடிவு. Std_id, result.course_id மூலம் வாருங்கள்
விளைவாக ஆர்டர் செய்யவும். Std_id, result.course_id ASC;

மேற்கண்ட வினவலை இயக்கிய பின் பின்வரும் வெளியீடு உருவாக்கப்படும்.

முடிவுரை:

பிவோட் () செயல்பாட்டின் செயல்பாட்டை MySQL இல் பிவோட் () செயல்பாட்டின் ஆதரவு இல்லாமல் எவ்வாறு செயல்படுத்தலாம் என்பது சில போலி தரவுகளைப் பயன்படுத்தி இந்த கட்டுரையில் காட்டப்பட்டுள்ளது. இந்த கட்டுரையைப் படித்த பிறகு SELECT வினவலைப் பயன்படுத்துவதன் மூலம் வாசகர்கள் எந்த வரிசை நிலை தரவையும் நெடுவரிசை தரவுகளாக மாற்ற முடியும் என்று நம்புகிறேன்.