我有以下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
此产品:
这很好,但问题是每个位置有多个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
我跳这是有道理的
答案 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
进行分组,TIME
与TMC
相同,那么它将按{{1}}分组