|6. Aggregate Functions & GROUP BY
Chapter 6SQL Tutorial~1 min read

Aggregate Functions & GROUP BY

COUNT, SUM, AVG, GROUP BY, HAVING

Aggregate functions multiple rows वर calculations करतात आणि एकच result देतात. COUNT, SUM, AVG, MIN, MAX — हे सर्वात common आहेत. GROUP BY सोबत वापरून groups नुसार statistics मिळवता येतात.

Basic Aggregate Functions

COUNT, SUM, AVG, MIN, MAX

sql
-- COUNT — किती rows?
SELECT COUNT(*) AS total_students FROM students;
SELECT COUNT(email) AS students_with_email FROM students;  -- NULL skip
SELECT COUNT(DISTINCT city) AS unique_cities FROM students;

-- SUM — total
SELECT SUM(marks) AS total_marks FROM students;
SELECT SUM(marks) AS pune_total FROM students WHERE city = 'Pune';

-- AVG — average
SELECT AVG(marks) AS class_average FROM students;
SELECT ROUND(AVG(marks), 2) AS avg_marks FROM students;

-- MIN / MAX
SELECT MIN(marks) AS lowest,  MAX(marks) AS highest FROM students;
SELECT MIN(name) AS first_alpha FROM students;  -- alphabetically

-- एकाच query मध्ये सगळे
SELECT
    COUNT(*)     AS total,
    ROUND(AVG(marks), 1) AS average,
    MIN(marks)   AS lowest,
    MAX(marks)   AS highest,
    SUM(marks)   AS total_marks
FROM students;

GROUP BY — Groups नुसार Aggregation

GROUP BY examples

sql
-- प्रत्येक city मध्ये किती students?
SELECT city, COUNT(*) AS student_count
FROM students
GROUP BY city;
-- Pune: 3, Mumbai: 2, Nagpur: 1 ...

-- प्रत्येक city चे average marks
SELECT city, ROUND(AVG(marks), 1) AS avg_marks
FROM students
GROUP BY city
ORDER BY avg_marks DESC;

-- City नुसार detailed stats
SELECT
    city,
    COUNT(*)           AS students,
    ROUND(AVG(marks), 1) AS avg_marks,
    MAX(marks)           AS top_score,
    SUM(marks)           AS total_marks
FROM students
GROUP BY city
ORDER BY avg_marks DESC;

HAVING — Groups Filter करणे

HAVING vs WHERE

sql
-- HAVING — GROUP BY नंतर filter करतो
-- WHERE — GROUP BY आधी rows filter करतो

-- 2 पेक्षा जास्त students असलेल्या cities
SELECT city, COUNT(*) AS student_count
FROM students
GROUP BY city
HAVING COUNT(*) > 2;

-- Average 75 पेक्षा जास्त असलेल्या cities
SELECT city, ROUND(AVG(marks), 1) AS avg
FROM students
GROUP BY city
HAVING AVG(marks) > 75
ORDER BY avg DESC;

-- WHERE + GROUP BY + HAVING एकत्र
SELECT city, COUNT(*) AS passed_students
FROM students
WHERE marks >= 40          -- आधी failed filter
GROUP BY city
HAVING COUNT(*) >= 2       -- नंतर count filter
ORDER BY passed_students DESC;
📌

SQL Query execution order: FROM → WHERE → GROUP BY → HAVING → SELECT → ORDER BY → LIMIT. म्हणून WHERE मध्ये aggregate functions नाही वापरता येत — त्यासाठी HAVING वापरतात.

Key Points — लक्षात ठेवा

  • COUNT(*) — सगळ्या rows, COUNT(col) — non-NULL rows
  • SUM, AVG, MIN, MAX — numeric columns वर
  • GROUP BY col — col च्या unique values नुसार groups
  • HAVING — groups filter (aggregate conditions साठी)
  • WHERE — individual rows filter (aggregate आधी)
0/10 chapters पूर्ण