தொகுதி பாடங்கள் (3/4)
GROUP மூலம் குழுவாக்குதல்
தொகுதி 2 இல் COUNT(*), AVG(...), SUM(...) அனைத்தையும் குறைக்கிறது என்பதை அறிந்து கொண்டீர்கள்
ஒரு ஒற்றை முடிவு வரிசைக்கு வரிசைகள். ஆனால் நீங்கள் சராசரி சம்பளம் விரும்பினால் என்ன செய்வது
ஒவ்வொரு துறைக்கும், முழு நிறுவனத்திற்கும் இல்லையா? உங்களுக்கு ஒரு வரிசை தேவை
குழு_. அதுதான் GROUP BY இன் வேலை.
தொடரியல்
SELECT grouping_column, AGGREGATE_FUNCTION(...)
FROM table
GROUP BY grouping_column;ஆங்கிலத்தில் படிக்கவும்: "வரிசைகளை ஒரே மதிப்பைப் பகிர்ந்து கொள்ளும் குழுக்களாகப் பிரிக்கவும்
grouping_column, மேலும் ஒவ்வொரு குழுவிற்கும் மொத்தத்தை கணக்கிடவும்".
-- Average salary per department:
SELECT department_id, AVG(salary) AS average
FROM employees
GROUP BY department_id;முடிவில் ஒவ்வொரு தனித்தனிக்கும் ஒரு வரிசை உள்ளது department_id
employees. நீங்கள் 5 வரிசைகளைப் பெறுவீர்கள்: 4 துறைகளில் ஒவ்வொன்றிற்கும் ஒன்று (1, 2,
3, 4) பிளஸ் ஒன் NULL (ஆண்ட்ரியா கோஸ்டா).
படிக்கக்கூடிய பெயர்களுக்கு JOIN உடன்
நீங்கள் அடிக்கடி department_id மூலம் குழுவாக்க விரும்புகிறீர்கள் ஆனால் பெயர்
துறை. நீங்கள் GROUP BY ஐ ஒரு JOIN உடன் இணைக்கிறீர்கள்:
SELECT d.name AS department,
COUNT(*) AS count,
AVG(e.salary) AS average_salary
FROM employees AS e
JOIN departments AS d ON e.department_id = d.id
GROUP BY d.name
ORDER BY count DESC;இது முழுக்க முழுக்க வணிக நுண்ணறிவு வினவல்: மூன்று வரிகளில் ஒவ்வொரு துறையிலும் எத்தனை பணியாளர்கள் உள்ளனர் மற்றும் அவர்கள் எவ்வளவு சம்பாதிக்கிறார்கள் என்பதைக் கூறுகிறது சராசரி, பெரியது முதல் சிறியது வரை வரிசைப்படுத்தப்பட்டது.
தங்க விதி
நீங்கள் GROUP BY ஐப் பயன்படுத்தும்போது, **SELECT இல் உள்ள ஒவ்வொரு நெடுவரிசையும் இருக்க வேண்டும்**:
- தொகுப்பு நெடுவரிசைகளில் ஒன்று (எ.கா.
department_id,d.name), அல்லது - ஒரு மொத்த செயல்பாட்டின் உள்ளே (எ.கா.
AVG(salary),COUNT(*)).
-- ERROR: first_name is neither in GROUP BY nor inside an aggregate
SELECT department_id, first_name, AVG(salary)
FROM employees
GROUP BY department_id;PostgreSQL ஒரு வெளிப்படையான பிழையை வழங்குகிறது ("நெடுவரிசை GROUP BY இல் தோன்ற வேண்டும்
உட்பிரிவு அல்லது மொத்த செயல்பாட்டில் பயன்படுத்தப்படும்"). ஆரம்ப வாரங்களில் இது பொதுவானது
தவறு: நீங்கள் அதைக் கண்டால், நிறுத்தி உங்களை நீங்களே கேட்டுக்கொள்ளுங்கள் "இதன் மதிப்பு என்ன
first_name 3 பேர் கொண்ட குழுவிற்கு?" — ஒரே பதில் இல்லை, மற்றும்
அதனால்தான் இயந்திரம் மறுக்கிறது.
முயற்சி செய்து பாருங்கள்
ஒவ்வொரு துறைக்கும், அதில் எத்தனை பணியாளர்கள் உள்ளனர் என்பதைக் கணக்கிடுங்கள். இரண்டு நெடுவரிசைகளை அனுப்பவும்: துறையின் பெயர் (departments.name) மற்றும் பணியாளர் எண்ணிக்கை. ஒரு துறைக்கு ஒரு வரிசை.
குறிப்பைக் காட்டு
COUNT(*) உடன் ஒருங்கிணைத்து d.பெயர் மூலம் குழு. SELECT இல் குழுவாக்கும் நெடுவரிசையும் மொத்தமும் மட்டுமே இருக்க வேண்டும்.
3 முயற்சிகளுக்குப் பிறகு தீர்வு கிடைக்கும்
மதிப்பாய்வு பயிற்சி
ஒவ்வொரு துறைக்கும் (departments.name), அதன் ஊழியர்களின் சராசரி சம்பளத்தை (AVG(சம்பளம்)) கணக்கிடவும், அதிகபட்சம் முதல் குறைந்த வரை வரிசைப்படுத்தப்பட்டுள்ளது.
குறிப்பைக் காட்டு
AVG(e.salary) மொத்தமாக, d.பெயர் மூலம் குழு, சராசரி DESC மூலம் ஆர்டர்.
3 முயற்சிகளுக்குப் பிறகு தீர்வு கிடைக்கும்