- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我在设计执行以下操作的查询时遇到问题:
使用以下数据库架构列出员工姓名、员工编号及其各自的每个项目的总收入:
department(primary key(deptName), deptName, deptCity)
employee(primary key(empNum), empName, empCity)
project(primary key(projectNum), projectName, budget)
worksOn(foreign key(empNum), foreign key(projectNum), deptNum, jobTitle, startDate, earningPerProject)
我可以显示员工姓名和员工编号,但当谈到每个员工的 PerProject 收入总额时,我迷失了。
有些员工被列出了不止一次,我意识到我必须使用聚合函数SUM()和COUNT(),但我还没弄清楚成功做到这一点的方法。
这是我到目前为止所拥有的:
SELECT DISTINCT(empName), employee.empNum, earningPerProject FROM employee, worksOn
WHERE worksOn.empNum = employee.empNum;
有人可以帮助我提供一些提示或示例查询吗?我不确定我将如何去做这件事。
最佳答案
此处,您必须使用 GROUP BY
子句和 SUM()
来计算给定员工的 PerProject 总收入。
DISTINCT
不是必需的。在您的代码中,您使用了 DISTINCT(empName)
,看起来您希望消除结果中重复的员工姓名。可能有两名员工同名,因此仅检索唯一的姓名可能会将某些员工排除在结果之外。这就是为什么我们使用 empNum
作为主键而不是名称。您实际上想要检索 empNum
和 empName
的不同组合。
您认为 worksOn
表中可能存在重复的 empNum
是正确的,因为给定的员工可以处理多个项目。 GROUP BY
会将具有相同 empNum
和 empName
的所有行分组在一起,并将它们组合成一行,从而消除对 独特
。 (更多内容见下文)
在这里,我修改了您的查询以包含 SUM()
和 GROUP BY
。
SELECT employee.empNum, employee.empName, SUM(worksOn.earningPerProject)
FROM employee, worksOn
WHERE employee.empNum = worksOn.empNum
GROUP BY employee.empNum, employee.empName;
<小时/>
FROM
子句 (FROMEmployee,worksOn
) 中使用的语法是已知的,其中列出要在同一行上连接在一起并以逗号分隔的表作为隐式连接。根据 Join (SQL),随着 SQL-92 的发布,此语法已被弃用。 .
最佳实践要求您改用称为显式联接的新语法,方法是使用 JOIN
关键字和添加的 ON
关键字来描述表之间的链接.
新的 JOIN
语法在功能上等同于旧的隐式连接语法。两者产生相同的结果。
SELECT employee.empNum, employee.empName, SUM(worksOn.earningsPerProject)
FROM employee
JOIN worksOn ON employee.empNum = worksOn.empNum
GROUP BY employee.empNum, employee.empName;
<小时/>
DISTINCT
是一个 SQL 关键字,它根据 SELECT
列表中的表达式消除重复的结果行。如果您仅请求一个表达式 (SELECT empCity FROMEmployee
),它将返回该表达式的唯一值(每个城市仅显示一次)。如果您请求多个表达式,它将返回这些表达式的唯一组合。
许多数据库引擎使用GROUP BY
来计算DISTINCT
结果,因此将它们一起使用通常是多余的。
不幸的是,您的查询包含一些合法的 SQL 语法。您将 empName
放在括号中,得到 SELECT DISTINCT (empName),employee.empNum, ...
。此语法具有误导性,因为 DISTINCT
是关键字而不是函数,并且 DISTINCT
不使用此处的括号。当使用 DISTINCT
时,它适用于 SELECT
中的所有表达式。在这种情况下,删除括号不会改变含义,尽管它确实使其更加清晰。
这三个查询是等效的:
SELECT DISTINCT empName, employee.empNum, ...
SELECT DISTINCT (empName), employee.empNum, ...
SELECT DISTINCT empName, (employee.empNum), ...
SQL 中的括号可用于对表达式进行分组,通常用于在处理 <、>、=、*、/等运算符时强制执行计算顺序。在单个表达式周围放置括号不会改变其值。虽然您认为只是将 DISTINCT
用于 empName
,但实际上只是将表达式 empName
括在括号中,实际上什么也没做。
您可以通过运行此查询来测试
SELECT empName FROM employee
和这个查询
SELECT (empName) FROM employee
您将看到相同的结果。
关于MySQL员工数据库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33818351/
我希望通过 Workday API 检索 Workday 工作人员(又名员工)Web 配置文件 URL。用例是我正在构建一个聊天机器人来检索用户信息,并且我希望能够深度链接到工作人员(员工)网络配置文
我很困惑我希望员工 ID 是自动生成的前缀格式我知道在 sql server 中触发之前是可能的我正在关注帖子 http://www.aspdotnet-suresh.com/2012/04/set-
我读了一个教程,其中有这个结构: struct { char Name[25]; int Age; float SkillRating; } Employee; defines
我有两个表 employee(name,id) ,其中包含所有员工和另一个表 reader(id,date) ,它给出了日期和哪个员工在场。我如何找到一定范围内的缺席者列表日期? 对于特定日期,我能够
我需要员工 ID 的标准正则表达式,例如 EMP015 015EMP EMP_015 E_015 EMP-015 EMP.VIS EMP/056 基本上它应该允许 . 或 _ 或 - 或 / 在字母数
我是 Angular 的新手,正在使用 Angular 编写代码,我正在观看视频教程。我注意到我的代码中有一些东西,但我无法理解它是如何工作的。 我想知道这段代码是什么意思组件上的“员工:员工 []”
下面从HR角度,来分析员工离职成本,欢迎大家留言讨论。 一个员工离职后留下的坑,并不是再找一个人填上就万事大吉了。 一般来说,核心人才的流失,至少有1-2个月的招聘期、3个月的适应期,6个月的融入期;
我有两个表 Employee 和 Department 此图像显示每个员工的经理。我想编写一个 SQL 查询,为我提供所有主管(经理、经理的经理......)的列表。 我只想要一个列,在给定特定员工时
我想将 ER 图的这一部分转换为关系模型。我们有一个三元关系,它说的是以下内容: 1 位客户将 1 个项目提供给 -> 多个开发人员 1 位客户分配给 1 位开发人员 -> 多个项目 1 个开发人员被
我将要开发一个应用程序,该应用程序将使用一些基于 SOAP 的 Web 服务框架。我做了一些研究,我有点喜欢 Axis2C 框架,但在某些主题中,我发现原来的 Axis2C 实现存在内存泄漏问题,并且
我的 SQL 数据库中有两个表: 公司: ID(自增) 姓名 地址 ... 员工: ID(自增) 公司编号 internal_id 姓名 姓氏 问题是我想要一个与他们所属的公司相关的员工 ID (in
我试图在堆栈溢出和谷歌上找到这个问题的答案,但没有找到。如果有问题需要更正或重复问题,请告诉我。 当我计算员工对象 (emp_obj) 和员工类的大小时,在这两种情况下我都得到了 4 个字节。但是我不
问题 如何在 Angular 员工 component.html 上返回 EmployeeCode ? 示例数据引用表 Code tableName FieldName LabelText
我是 hibernate 新手,正在使用 hibernate 版本 4.3.4 JAR 文件。我正在尝试使用 intelliJ 社区版中的 mySQL 服务器执行简单的 Hibernate 程序。以下
我正在使用 laravel 5.4 和 Yajra Datatable,但我无法使其工作..我遇到了“Uncaught TypeError: $(...).DataTable is not a fun
我想创建一个小型示例应用程序,它可以读取我的员工徽章并将其显示在屏幕上(或者如果我可以复制它就更好了,这样我们就可以使用我们的手机徽章而不是我们的塑料身份证) 几个问题1. 这在技术上可行吗?如果是这
我有一个 person 对象,需要将它存储为 byte[] 并再次检索该 byte[] 并转换为 person 对象 并且 BinaryFormatter 在 Silverlight 中不可用 最佳答
最近开始学习oracle和sql。 在学习的过程中,我遇到了几个问题,我的 friend 在接受采访时被问到这些问题。 SELECT * FROM Employees WHERE NULL IS N
当我执行以下命令来创建分片时: mysqlfabric sharding add_table 1 employees.employees emp_no 我收到以下错误: DatabaseError:
这是我的表格 门票 tic_id, tic_cat tic_priority tic_cus tic_date tic_title tic_
我是一名优秀的程序员,十分优秀!