2020-10-30

How to I find the person who has taught the most classes

I want to try and find the employee who has taught the most classes as the position Teacher. So in this I want to print out Nick, as he has taught the most classes as a Teacher.

However, I am getting the error:

ERROR: column "e.name" must appear in the GROUP BY clause or be used in an aggregate function Position: 24

CREATE TABLE employees (
  id integer primary key,
  name text
);

CREATE TABLE positions (
  id integer primary key,
  name text
);

CREATE TABLE teaches (
  id integer primary key,
  class text,
  employee integer,
  position integer,
  foreign key (employee) references employees(id),
  foreign key (position) references positions(id)
);

INSERT INTO employees (id, name) VALUES
(1, 'Clive'), (2, 'Johnny'), (3, 'Sam'), (4, 'Nick');

INSERT INTO positions (id, name) VALUES
(1, 'Assistant'), (2, 'Teacher'), (3, 'CEO'), (4, 'Manager');

INSERT INTO teaches (id, class, employee, position) VALUES
(1, 'Dancing', 1, 1), (2, 'Gardening', 1, 2),
(3, 'Dancing', 1, 2), (4, 'Baking', 4, 2),
(5, 'Gardening', 4, 2), (6, 'Gardening', 4, 2),
(7, 'Baseball', 4, 1), (8, 'Baseball', 2, 1),
(9, 'Baseball', 4, 2);

The SQL statement I am trying to use:

SELECT count(t.class), e.name
FROM positions p
JOIN teaches t
ON p.id = t.position
JOIN employees e
ON e.id = t.employee
WHERE p.name = 'Teacher'
GROUP BY t.employee;

I've been working on this on a sql fiddle: http://www.sqlfiddle.com/#!17/a8e19c/3



from Recent Questions - Stack Overflow https://ift.tt/32cbUxV
https://ift.tt/eA8V8J

No comments:

Post a Comment