使用计数函数SQL对数据库进行计数

使用计数函数SQL对数据库进行计数,sql,count,Sql,Count,我有这样的数据库模式 Flights(flno,from,to,distance,departs,arrives,price) Aircraft(aid,aname,cruisingRange) Certified(employee,aircraft) Employees(eid,ename,salary) 其中Flno是主键,每条路由对应一个“Flno” 所以我有一个问题要回答 对于每个飞行员,列出他们的员工ID、姓名和路线数 他能驾驶飞机 我有这个SQL,对吗?(我可以测试,因为我没有数据

我有这样的数据库模式

Flights(flno,from,to,distance,departs,arrives,price)
Aircraft(aid,aname,cruisingRange)
Certified(employee,aircraft)
Employees(eid,ename,salary)
其中Flno是主键,每条路由对应一个“Flno”

所以我有一个问题要回答

对于每个飞行员,列出他们的员工ID、姓名和路线数 他能驾驶飞机

我有这个SQL,对吗?(我可以测试,因为我没有数据库的数据)


这是一个简单的问题,但正如大家都提到的,员工和航班之间没有任何联系。这些关系在
certified
处停止

你显然已经或将要建立一些关系。考虑到员工和航班之间存在多对多关系,我已经编写了一个查询,将为您提供计数。这意味着一个员工可以有多个航班,而一个航班可以由多个员工完成

航班(航班号、往返、距离、出发、到达、价格) 飞机(救援、安纳姆、巡航) 认证(员工、飞机) 员工(eid、ename、工资)

我希望这至少向您展示了如何正确编写count语句,但您可能应该重新学习对count语句的理解

希望有帮助

编辑

如果没有关系,在你的评论中工作,你可以得到如下计数

select
  e.eid employee_id,
  e.ename employee_name,
  count(*)
from
  employees e 

  inner join certified c on
    c.employee = e.eid

  inner join aircraft a on
    a.aid = c.aircraft

  inner join flights f on
    f.distance <= a.cruisingRange
group by
  e.eid,
  e.ename
选择
e、 eid雇员身份证,
e、 雇员姓名,
计数(*)
从…起
雇员
内连接认证c on
c、 雇员=e.eid
内部连接飞机a
a、 飞机
内部连接f on

f、 距离这是一个简单的问题,但正如大家都提到的,员工和航班之间没有任何联系。这些关系在
certified
处停止

你显然已经或将要建立一些关系。考虑到员工和航班之间存在多对多关系,我已经编写了一个查询,将为您提供计数。这意味着一个员工可以有多个航班,而一个航班可以由多个员工完成

航班(航班号、往返、距离、出发、到达、价格) 飞机(救援、安纳姆、巡航) 认证(员工、飞机) 员工(eid、ename、工资)

我希望这至少向您展示了如何正确编写count语句,但您可能应该重新学习对count语句的理解

希望有帮助

编辑

如果没有关系,在你的评论中工作,你可以得到如下计数

select
  e.eid employee_id,
  e.ename employee_name,
  count(*)
from
  employees e 

  inner join certified c on
    c.employee = e.eid

  inner join aircraft a on
    a.aid = c.aircraft

  inner join flights f on
    f.distance <= a.cruisingRange
group by
  e.eid,
  e.ename
选择
e、 eid雇员身份证,
e、 雇员姓名,
计数(*)
从…起
雇员
内连接认证c on
c、 雇员=e.eid
内部连接飞机a
a、 飞机
内部连接f on

f、 距离不,这不太正确,因为您没有任何
JOIN
标准。这将为您提供所有员工和航班的笛卡尔乘积。如果您进行测试,就会发现这一点。您可以通过将数据插入表中,然后分析查询结果来进行测试。您的架构缺少航班和飞机之间的关系。表之间的外键是什么?是否通过
认证。employee
Employees.eid
Employees.ename
相关?是否通过
认证。飞机
飞机.aid
飞机.aname
相关?我猜的是id列?而且,列名有点难读。显然,
aid
表示飞机id,当上面的同一行显示它在
airpair
表上时,但是当您有一个连接多个表的查询时,
aid
会让短期记忆差的人(像我一样)感到困惑。这些不能命名为
飞机id
员工id
,等等吗?飞行中没有任何东西链接到员工(或飞机)。你怎么能期望按照你的要求去做呢?不,这不太正确,因为你没有任何
JOIN
标准。这将为您提供所有员工和航班的笛卡尔乘积。如果您进行测试,就会发现这一点。您可以通过将数据插入表中,然后分析查询结果来进行测试。您的架构缺少航班和飞机之间的关系。表之间的外键是什么?是否通过
认证。employee
Employees.eid
Employees.ename
相关?是否通过
认证。飞机
飞机.aid
飞机.aname
相关?我猜的是id列?而且,列名有点难读。显然,
aid
表示飞机id,当上面的同一行显示它在
airpair
表上时,但是当您有一个连接多个表的查询时,
aid
会让短期记忆差的人(像我一样)感到困惑。这些不能命名为
飞机id
员工id
,等等吗?飞行中没有任何东西链接到员工(或飞机)。你怎么能期望做你要求的事?嘿,谢谢你的回答。但我的想法是这样的
将employees.eid链接到certified.employee
然后
将certified.aircraft链接到aircraft.aid
然后找到
flights.distance=flights.distance.
有什么建议吗?当然会快速调整答案。嘿,谢谢你的回答。但我的想法是这样的
将employees.eid链接到certified.employee
然后
将certified.aircraft链接到aircraft.aid
然后在
flights.distance=flights.distance.
这方面有什么建议吗?当然可以快速调整答案。
select
  e.eid employee_id,
  e.ename employee_name,
  count(*)
from
  employees e 

  inner join certified c on
    c.employee = e.eid

  inner join aircraft a on
    a.aid = c.aircraft

  inner join flights f on
    f.distance <= a.cruisingRange
group by
  e.eid,
  e.ename