使用计数函数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