Sql 在查询中使用

Sql 在查询中使用,sql,oracle,Sql,Oracle,生成每种机型飞行小时数最高的飞行员列表。包括pid、模型和记录小时数的列 这是我尝试过的-我对SQL非常陌生: select pid, hourslogged from flightskills f join (select model, max(hourslogged) as Hourslogged from flightskills group by model) h on f.mode

生成每种机型飞行小时数最高的飞行员列表。包括pid、模型和记录小时数的列

这是我尝试过的-我对SQL非常陌生:

select
    pid, hourslogged 
from 
    flightskills f
join    
   (select 
        model, max(hourslogged) as Hourslogged 
    from 
        flightskills
    group by 
        model) h on f.model = h.model
这个输出是错误的

PID MODEL   HOURSLOGGED
1   A-10        387
4   A-10        387
6   A-10        387
7   A-10        387
3   F-117A  254
4   F-117A  254
5   F-117A  254
6   F-117A  254
1   F-15E   450
2   F-15E   450
3   F-15E   450
4   F-15E   450
6   F-15E   450
1   F-16    827
6   F-16        827
1   F-22        900
3   F-22        900
4   F-22        900
5   F-22        900
6   F-22        900
6   X-100   100
想要这样的吗

PID MODEL   HOURSLOGGED
1   A-10        387
3   F-117A  254
4   F-15E   450
1   F-16    827
3   F-22        900
6   X-100   100

我想你正在寻找这样的东西:

select f.*
from flightskills f
where f.hourslogged = (select max(f2.hourslogged) 
                       from flightskills f2
                       where f2.model = f.model
                      );

我想你正在寻找这样的东西:

select f.*
from flightskills f
where f.hourslogged = (select max(f2.hourslogged) 
                       from flightskills f2
                       where f2.model = f.model
                      );
在你的询问中

select pid, hourslogged 
  from flightskills f
  join    
     (select model, max( hourslogged) as Hourslogged 
        from flightskills
       group by model) h    
    on f.model = h.model
编译查询时,有两个
PID
列和两个
hoursloged
列可用,
f.PID
h.PID
,以及
f.hoursloged
h.hoursloged
。在“选择”列表中,您需要告诉数据库要使用哪些列。要解决此问题,您可以将查询更改为

select f.pid, h.hourslogged 
  from flightskills f
  join    
     (select model, max( hourslogged) as Hourslogged 
        from flightskills
       group by model) h    
    on f.model = h.model

祝你剩余的作业顺利。

在你的查询中

select pid, hourslogged 
  from flightskills f
  join    
     (select model, max( hourslogged) as Hourslogged 
        from flightskills
       group by model) h    
    on f.model = h.model
编译查询时,有两个
PID
列和两个
hoursloged
列可用,
f.PID
h.PID
,以及
f.hoursloged
h.hoursloged
。在“选择”列表中,您需要告诉数据库要使用哪些列。要解决此问题,您可以将查询更改为

select f.pid, h.hourslogged 
  from flightskills f
  join    
     (select model, max( hourslogged) as Hourslogged 
        from flightskills
       group by model) h    
    on f.model = h.model


祝你在剩下的作业中好运。

你甚至不需要进行嵌套查询。当您使用Oracle时,您可以利用。仍然需要一点子查询,因为分析函数不会直接进入WHERE条件(它在WHERE条件求值后运行)

您可以使用不同的排名方法,而不是简单的。例如,将处理两名飞行员记录相同小时数的不同情况(他们将同时显示两名飞行员,而不是随机显示两名飞行员中的一名)


对于每个型号,上述方法直接在顶部记录之后进行
hourslogged
。您可以通过两个步骤完成此操作1./Rank 2./Select top-Rank(
rn=1
)。

您甚至不需要进行嵌套查询。当您使用Oracle时,您可以利用。仍然需要一点子查询,因为分析函数不会直接进入WHERE条件(它在WHERE条件求值后运行)

您可以使用不同的排名方法,而不是简单的。例如,将处理两名飞行员记录相同小时数的不同情况(他们将同时显示两名飞行员,而不是随机显示两名飞行员中的一名)


对于每个型号,上述方法直接在顶部记录之后进行
hourslogged
。您可以通过两个步骤完成此操作1./Rank 2./Select top-Rank(
rn=1
)。

使用表别名和子查询别名(
f.
h.
)为列
pid
hoursloged
)添加前缀,由于db无法决定从哪个数据集中选择……示例数据和期望的结果将非常有用。而且,当您添加别名时,仍然无法得到正确的答案,您还必须添加另一个连接条件:
on f.model=h.model和f.hoursloged=h.hoursloged
以获得具有高值的行。稍后,您将学习如何使用窗口聚合以更简单的方式获得相同的结果,即
行数
最大值
好的,谢谢,我现在明白了。必须在车型和工时上加入。在工时记录上加入将是一种冒险的做法。如果两个飞行员记录的小时数相同怎么办?在列
pid
hoursloged
前面加上表和子查询别名(
f.
h.
),由于db无法决定从哪个数据集中选择……示例数据和期望的结果将非常有用。而且,当您添加别名时,仍然无法得到正确的答案,您还必须添加另一个连接条件:
on f.model=h.model和f.hoursloged=h.hoursloged
以获得具有高值的行。稍后,您将学习如何使用窗口聚合以更简单的方式获得相同的结果,即
行数
最大值
好的,谢谢,我现在明白了。必须在车型和工时上加入。在工时记录上加入将是一种冒险的做法。如果两名飞行员记录的小时数相同怎么办?这很接近,但这是飞行员PID模型小时记录的所有小时总数1 A-10 387 4 A-10 387 6 A-10 387 7 A-10 387 3 F-117A 254这很接近,但这是飞行员PID模型小时记录的所有小时总数1 A-10 387 4 A-10387 6 A-10387 A-10387 3 F-117A254@MrBlack . . . 这不是一个有用的评论。@Black先生。这不是一个有用的评论。