在计算列上的内部联接

时间:2018-11-19 21:34:19

标签: mysql sql join

我在编写执行内部联接的查询时遇到了麻烦。

在我的数据库表中,我有列Date,HighTemperature,LowTemperature。我想要的是按一年中的月份来计算诸如最高温度之类的信息,并检索这些信息同时发生的日期。使用以下查询,效果很好:

SELECT ds.Date, 
    MONTH(ds.Date) AS Month, 
    ds.HighTemperature 
FROM WeatherData.DailyStats ds 
INNER JOIN (SELECT MONTH(Date) AS Month, 
        Date, 
        MAX(HighTemperature) AS HighTemperature 
    FROM WeatherData.DailyStats GROUP BY Month) ds2 
    ON MONTH(ds.Date) = MONTH(ds2.Date) AND ds.HighTemperature = ds2.HighTemperature 
ORDER BY MONTH(ds.Date), ds.DATE ASC

这给了我12行,一年中的每个月一次。每行都包含月份号,该月份记录的最高温度及其发生的日期。

现在我没有成功的地方是,当尝试做一些更棘手的事情时,不是想直接在HighTemperature上运行查询,而是要查找每个月的最高每日温度范围,即得到相同的(HighTemperature - LowTemperature) AS TemperatureRange的搜索结果。

如何修改查询以执行此操作?

1 个答案:

答案 0 :(得分:0)

啊,明白了!

我遇到的问题是因为我在ON语句中试图对TemperatureRange = ds2.TemperatureRange进行分组,其中TemperatureRange来自第一个查询。

相反,如果我将其替换为ds.HighTemperature - ds.LowTemperature = ds2.TemperatureRange,一切都很好!

相关问题