sql - 找出哪个员工接受了更多培训
问题描述
我有 2 张桌子,员工和 classes_taken。我想看看哪些员工上过超过 2 节课。但是,我收到此错误ERROR: aggregate functions are not allowed in WHERE Position: 87
。
CREATE TABLE employees (
id integer primary key,
name text
);
CREATE TABLE classes_taken (
employee integer,
class text,
foreign key (employee) references employees(id)
);
INSERT INTO employees (id, name) VALUES
(1, 'bob'), (2, 'sam'), (3, 'mike');
INSERT INTO classes_taken (employee, class) VALUES
(1, 'swimming'), (1, 'dancing'), (2, 'swimming'), (2, 'tennis'), (3, 'golf'), (3, 'dancing');
我的选择声明。
select e.id, e.name
FROM employees e
JOIN classes_taken c
ON e.id = c.employee
WHERE count(c.class) > 2
GROUP BY c.class;
SQLFiddle:http ://sqlfiddle.com/#!15/5296cb/4
解决方案
您需要将计数过滤器保留在 HAVING 子句中,因为它位于聚合值上。
select e.id, e.name
FROM employees e
INNER JOIN classes_taken c ON e.id = c.employee
GROUP BY e.id, e.name
HAVING count(c.class) > 2
推荐阅读
- java - 将外部文档(来自 xyz-javadoc.jar)复制到 JavaDocs
- perl - 是否可以使用 DBIx 类防止读取和/或设置字段值?
- python - 当包位于子目录中时,从顶层包含包数据 Python
- node.js - Flutter:为用户订阅一个集合中的不同主题以获取推送通知 fcm
- javascript - 仅打印最后一个元素时,打印数组显示不同的值 - javascript
- r - 如何在地图中使用选择来获取数据框列表
- scala - Scala未使用的表达式错误与if语句
- c++ - 删除 boost 归档对象也会删除与之关联的流?
- git - 硬重置后推送git分支
- python - 在 Python 中将定义的函数转换为 lambda 函数