【问题标题】:SQL JOINing on max value, even if it is 0SQL JOINing 最大值,即使它是 0
【发布时间】:2014-06-10 19:01:50
【问题描述】:

我有两张表大致如下:

Airports
uniqueID | Name
0001     | Dallas


Runways
uniqueID | AirportID | Length
000101   | 0001      | 8000

我正在执行如下所示的连接:

SELECT Airports.Name, Runways.Length FROM Airports, Runways 
WHERE Airports.uniqueID==Runways.AirportID

显然,每条跑道只有一个机场,每个机场有 1..n 条跑道。

对于有多条跑道的机场,这给了我几行,一个用于该机场的每条跑道。 我想要一个只包含最长跑道行的结果集,即 MAX(Length)。 有时,数据库中多个跑道的长度为 0,因为缺少源数据。在那种情况下,我显然只想要 Length = 0 的一行。

我已经尝试过这里列出的方法:Inner Join table with respect to a maximum value,但这实际上并没有帮助,因为这就像在寻找最长的跑道,而不是在某个特定机场寻找最长的跑道。

【问题讨论】:

  • 当有几个长度为 0 时,使用什么标准来确定返回的跑道? (airportID 最小的 airportID?)
  • @xQbert 可以是随机的。如果它们存储在 Length=0 的数据库中,我不在乎。随便挑一个。

标签: sql sqlite join distinct


【解决方案1】:

这似乎很简单,但它似乎满足你描述的所有情况......

SELECT A.Name, Max(R.Length)
FROM Airports A
INNER JOIN Runways R
 on A.uniqueID=R.AirportID
Group by A.Name

这应该为您提供每个机场的最大跑道。

如果您需要额外的数据元素,则将上述内容用作内联视图(连接中的子查询)以将结果集限制为仅这些机场及其最大跑道。

【讨论】:

  • 不,就是这样。如果它看起来“太简单”,那是因为自 2005 年以来我没有做过任何 SQL,所以我什至忘记了最简单的事情。
猜你喜欢
  • 1970-01-01
  • 2020-11-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-01-05
  • 1970-01-01
  • 1970-01-01
  • 2021-04-29
相关资源
最近更新 更多