使用来自多个表的MAX和SUM进行SELECT

时间:2010-11-26 11:45:03

标签: sql mysql group-by

我有3张桌子:

  • weather_data(hourly_date,rain)
  • weather_data_calculated(hourly_date,calc_value)
  • weather_data_daily(daily_date,daily_value)

我想使用以下选项从这3个表中获取DAILY值列表:

SELECT daily_date, daily_value, SUM(rain), MAX(calc_value)

SUM和MAX需要在一天中的所有时间完成。

这就是我所做的:

SELECT
date_format(convert_tz(daily_date, 'GMT', 'America/Los_Angeles'), '%Y-%m-%d 00:00:00') as daily_date_gmt,
daily_value,
SUM(rain),
MAX(calc_value)
FROM weather_data_daily wdd, weather_data wd, weather_data_calculated wdc
WHERE daily_date_gmt=date_format(convert_tz(wd.hourly_date, 'GMT', 'America/Los_Angeles'), '%Y-%m-%d 00:00:00')
and daily_date_gmt=date_format(convert_tz(wdc.hourly_date, 'GMT', 'America/Los_Angeles'), '%Y-%m-%d 00:00:00')
group by daily_date_gmt
order by daily_date_gmt;

这不起作用,因为在这种情况下我不知道如何处理该组。

我也尝试使用临时表,但也没有成功。

感谢您的帮助!

3 个答案:

答案 0 :(得分:1)

在您的组中包含daily_value,或使用两个查询。一个将包含日期列和两个聚合,另一个将包含日期列和每日值。然后,您可以使用单个外部查询在日期列上连接这些结果集。

编辑:您在评论中说,通过查询未完成,在组中包含daily_value。这是因为(可能)您的查询包含的所有表之间没有连接条件。这将导致可能非常大的结果集,这将花费很长时间。我不介意帮助实际的SQL,但您需要更新您的问题,以便我们可以看到哪些字段来自哪些表。

答案 1 :(得分:0)

假设你只有一个daily_date条目,'weather_data_daily'中的daily_value你应该 GROUP BY daily_date,daily_value,然后您的聚合(SUM和MAX)将对正确的分组进行操作。

答案 2 :(得分:0)

试试这个:

select a.daily_date, a.daily_value, SUM(b.rain), MAX(c.calc_value)
from weather_data_daily a,weather_data b,weather_data_calculated c
where convert(varchar, a.daily_date, 101)=convert(varchar, b.hourly_date, 101)
and convert(varchar, a.daily_date, 101)=convert(varchar, c.hourly_date, 101)
group by a.daily_date, a.daily_value

您必须以某种方式将表连接在一起(这使用内连接)。这需要以相同的格式获取每小时日期和其他日期。这给了他们格式MM / DD / YYYY。