帮助调整我的mysql语句以生成所需的查询

时间:2011-09-16 19:36:52

标签: mysql select group-by

我有以下mysql语句基本上做了我想做的事情,除了一件事。

SELECT 
a.tmc, w.date, ROUND(AVG(a.surface_temperature), 0) surface_temperature, ROUND(AVG(a.air_temperature), 0) air_temperature, 
ROUND(AVG(a.material_rate),0) material_rate, 
Time_Format(w.time, '%H:00') as time, 
ROUND(AVG(w.intensity), 0) intensity, 
FROM application a 
LEFT OUTER JOIN weather w ON a.DATE = w.DATE AND a.tmc = w.tmc 
WHERE w.DATE = '" & calendar1.SelectedDate & "' 
AND w.event= '" & weatherType.SelectedItem.Value & "' 
AND w.City = '" & sender.CssClass & "' 
GROUP BY time

此产品: enter image description here

这很好,但问题是每个位置有多个TMC(想想TMC是城市中的消防站。大城市有多个TMC

我需要它做的是平均每小时所做的一切,但每次tmc都要做,而不仅仅是根据时间和其他过滤标准出现的第一个tmc。

我赞成两个​​:

GROUP BY TIME AND TMC

and

GROUP BY TMC

但它们都只提供1次和1个位置。

我如何调整此声明,以便每小时每tmc拉出所有这些标准的平均值?

我想要一些具有以下输出的内容:

Time TMC       Temp
4:00 107+4807   27
4:00 108+3352   32
5:00 107+4807   28
5:00 105+2274   28

我跳这是有道理的

2 个答案:

答案 0 :(得分:2)

我认为你需要用逗号分隔它们:

GROUP BY time, tmc

manual page for the SELECT statement

中可能并不那么清楚
[GROUP BY {col_name | expr | position}
      [ASC | DESC], ... [WITH ROLLUP]]

即,您可以指定多个列以形成更精细的组。

指定逻辑组合时,如

GROUP BY TIME AND TMC

事情可能看起来有效,但所产生的群体将取决于时间和tmc的'逻辑'值 - 你会得到一个组,其中两个都显示为“true”,而一组显示为其他所有。

答案 1 :(得分:1)

是的,逗号将值按值分开。第一个将优先考虑。因此,如果您说GROUP BY TIME, TMC它将按TIME进行分组,TIMETMC相同,那么它将按{{1}}分组