SQL 显示一张表中的数据并计算另一张表中的结果

Posted

技术标签:

【中文标题】SQL 显示一张表中的数据并计算另一张表中的结果【英文标题】:SQL Display data from one table and count results from another table 【发布时间】:2018-11-07 15:30:02 【问题描述】:

我是 SQL 初学者。我的作业有问题。

我需要编写一个显示以下信息的 Select 语句。 - 员工姓名(Ename) - 员工身份证号码 (EIC_NO) - 支付记录总数 - 仅对支付记录超过 100 条的员工显示上述信息

我认为问题在于我需要呈现的数据属于 2 个单独的表。这些表格的结构如下:

表 1 名称 员工 列名: Employee_ID(主键), Ename(辅助键), EIC。

表 2 名称 支付 列名: PYMT_ID(主键), PYMT_时间戳, PYMT_方法, Booking_id, Emp_ID(Employee表的外键,与Employee_ID相同)。

我的代码如下。但它不起作用。

SELECT e.employee_id, e.ename, COUNT(p.emp_ID=e.employee_id)
FROM employee e, payment p
HAVING COUNT(p.emp_ID=e.employee_id) >100;

感谢是否有人可以在这方面帮助我。谢谢你。 :)

【问题讨论】:

查看内部连接,不要使用逗号分隔的表名,使用连接 @Brad,OP 正在做一个内部连接,一个隐式连接。 【参考方案1】:

您应该使用group by 对所有付款emp_ID 进行分组。

  select p.emp_ID, e.ename, COUNT(*)
    from employee e, payment p
   where p.emp_ID=e.employee_id
group by p.emp_ID, e.ename
  having count(*) > 100;

【讨论】:

【参考方案2】:

选择 e.employee_id AS ID、e.ename AS Name、COUNT(p.employee_id) AS TotalPaymentRecs

FROM Employees as e INNER JOIN Payments as p ON e.employee_id = p.employee_id

按 e.employee_id、e.ename 分组

拥有 TotalPaymentRecs > 100

【讨论】:

不要只转储代码,还要解释你做了什么以及它为什么起作用。在How to Answer 上阅读更多信息。【参考方案3】:
SELECT e.employee_Id, e.ename, COUNT(p.emp_id)
From Employee as e
INNER JOIN Payement as p
ON e.employee_id = p.emp_id
GROUP BY e.employee_id, e.ename, p.emp_id
HAVING COUNT(p.emp_id) > 100

【讨论】:

感谢所有解决方案!非常感激! :)

以上是关于SQL 显示一张表中的数据并计算另一张表中的结果的主要内容,如果未能解决你的问题,请参考以下文章

SQL关联两张表查数据,结果只显示一条。

一张表中的ID对应另一张表中的两个字段怎么查询

Oracle中把一张表查询结果插入到另一张表中

在SQL中统计一个字段 然后再更新到另一张表的一个字段

sql语句 怎么从一张表中查询数据插入到另一张表中

Oracle中的多行插入查询(从一张表中选择多行并插入到另一张表中[重复]