HAVING

Filter groups.

HAVING filters groups after GROUP BY.

Goal

Keep cities with at least 8 units.

DROP TABLE IF EXISTS sales;
CREATE TABLE sales (
  city TEXT,
  units INTEGER,
  shillings INTEGER
);
INSERT INTO sales VALUES
  ('Nairobi', 12, 480),
  ('Mombasa', 8, 320),
  ('Kisumu', 5, 200);

SELECT city, SUM(units) AS units FROM sales GROUP BY city HAVING SUM(units) >= 8;
DROP TABLE IF EXISTS sales;
CREATE TABLE sales (
  city TEXT,
  units INTEGER,
  shillings INTEGER
);
INSERT INTO sales VALUES
  ('Nairobi', 12, 480),
  ('Mombasa', 8, 320),
  ('Kisumu', 5, 200);

SELECT city, SUM(shillings) AS kes FROM sales GROUP BY city HAVING SUM(shillings) > 200;
DROP TABLE IF EXISTS sales;
CREATE TABLE sales (
  city TEXT,
  units INTEGER,
  shillings INTEGER
);
INSERT INTO sales VALUES
  ('Nairobi', 12, 480),
  ('Mombasa', 8, 320),
  ('Kisumu', 5, 200);
INSERT INTO sales VALUES ('Nairobi', 1, 40);
SELECT city, COUNT(*) AS rows FROM sales GROUP BY city HAVING COUNT(*) > 1;
DROP TABLE IF EXISTS sales;
CREATE TABLE sales (
  city TEXT,
  units INTEGER,
  shillings INTEGER
);
INSERT INTO sales VALUES
  ('Nairobi', 12, 480),
  ('Mombasa', 8, 320),
  ('Kisumu', 5, 200);

SELECT city, AVG(units) AS avg_u FROM sales GROUP BY city HAVING AVG(units) >= 8;