ప్రధాన కంటెంట్‌కు వెళ్లండి
మాడ్యూల్ 3 · 4లో పాఠం 3కోర్సులో 11/57~10 min
మాడ్యూల్ పాఠాలు (3/4)

GROUP ద్వారా సమూహం చేయడం

మాడ్యూల్ 2లో మీరు COUNT(*), AVG(...), SUM(...) అన్నింటినీ తగ్గించారని తెలుసుకున్నారు. ఒక ఒకే ఫలిత వరుసకు అడ్డు వరుసలు. అయితే మీకు సగటు జీతం కావాలంటే ప్రతి విభాగానికి, మొత్తం కంపెనీకి కాదా? మీకు ఒక వరుస పర్ కావాలి సమూహం. అది GROUP BY యొక్క పని.

వాక్యనిర్మాణం

SQL
SELECT grouping_column, AGGREGATE_FUNCTION(...)
FROM   table
GROUP BY grouping_column;

ఆంగ్లంలో చదవండి: "వరుసలను ఒకే విలువను పంచుకునే సమూహాలుగా విభజించండి grouping_column, మరియు ప్రతి సమూహానికి మొత్తం గణించండి".

SQL
-- 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తో కలపండి:

SQL
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లోని ప్రతి నిలువు వరుస తప్పనిసరిగా:

  1. ** సమూహ నిలువు వరుసలలో ఒకటి** (ఉదా. department_id, d.name), లేదా
  2. మొత్తం ఫంక్షన్ లోపల (ఉదా. AVG(salary), COUNT(*)).
SQL
-- 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 మంది వ్యక్తుల సమూహానికి?" — ఒక్క సమాధానం లేదు, మరియు అందుకే ఇంజిన్ నిరాకరిస్తుంది.

దీనిని ప్రయత్నించండి

వ్యాయామం#sql.m3.l3.e1
ప్రయత్నాలు: 0లోడ్ అవుతోంది...

ప్రతి విభాగానికి, అది ఎంత మంది ఉద్యోగులను కలిగి ఉందో లెక్కించండి. రెండు నిలువు వరుసలను తిరిగి ఇవ్వండి: విభాగం పేరు (departments.name) మరియు ఉద్యోగుల సంఖ్య. ఒక్కో విభాగానికి ఒక వరుస.

ఎడిటర్ లోడ్ అవుతోంది…
సూచనను చూపించు

COUNT(*)తో కలిపి మరియు d.name ద్వారా సమూహం చేయండి. SELECT తప్పనిసరిగా గ్రూపింగ్ కాలమ్ మరియు సమిష్టిని మాత్రమే కలిగి ఉండాలి.

3 ప్రయత్నాల తర్వాత పరిష్కారం లభిస్తుంది

వ్యాయామం సమీక్షించండి

వ్యాయామం#sql.m3.l3.e2
ప్రయత్నాలు: 0లోడ్ అవుతోంది...

ప్రతి డిపార్ట్‌మెంట్ (departments.name), దాని ఉద్యోగుల సగటు జీతం (AVG(జీతం))ని అత్యధిక నుండి అత్యల్పానికి క్రమబద్ధీకరించండి.

ఎడిటర్ లోడ్ అవుతోంది…
సూచనను చూపించు

AVG(e.జీతం) మొత్తంగా, d.పేరు ద్వారా సమూహం, సగటు DESC ద్వారా ఆర్డర్ చేయండి.

3 ప్రయత్నాల తర్వాత పరిష్కారం లభిస్తుంది