出于我的问题的目的,我在MySQL服务器上有一个数据库,其中包含许多出租车的信息(它由两个表history_trips
和trip_info
组成)。
在history_trips中,每行的有用数据都包含一个唯一的字母数字ID,ride_id
,骑手的名字,rider
以及骑行结束的时间{{1作为Ymd字符串。
在trip_info中,每行的有用数据类似地包含finishTime
和ride_id
,但也包含整数rider
(在后端从其他数据计算)。
我需要做的是创建一个查询,该查询可以找到所有最大值的平均值'来自所有骑手在给定时间段内。包含在此平均值中的车手仅在上述时间段内完成少于X(让我们说3)的骑行时才被考虑。
到目前为止,我有一个查询创建了一个分组表,其中包含value
的名称,rider
的最高'值'乘坐,所述乘坐的finishTime
,以及他们在那个时间段内乘坐的次数value
。但是,num_rides
列为我提供了与AVG(b.value)
相同的值,这是意料之外的。我想找到一些方法来返回b.value
列的平均值。
b.value
我是SQL的新手,但在其他一些论坛上已经阅读过,当在值上使用SELECT a.rider, a.finishTime, b.value, AVG(b.value), COUNT(a.rider) as num_rides
FROM history_trips as a, trip_info as b
WHERE a.finishTime > 'arbitrary_start_date_str' and a.ride_id = b.ride_id
and b.value = (SELECT MAX(value)
from trip_info where rider = b.rider and ride_id = b.ride_id)
GROUP BY a.rider
HAVING COUNT(a.rider) < 3
函数时,您还必须AVG
该值。我想知道是否有办法解决这个问题,或者我是否错误地考虑了这个问题。提前感谢您提出的任何建议/解决方案!
答案 0 :(得分:0)
以下对我有用:
SELECT AVG(ridergroups.maxvalues) avgmaxvalues FROM
(SELECT MAX(trip_info.value) maxvalues FROM trip_info
INNER JOIN history_trips
ON trip_info.rideid = history_trips.ride_id
WHERE history_trips.finishTime > '2010-06-20'
GROUP BY trip_info.rider
HAVING COUNT(trip_info.rider) < 3) ridergroups;
在按日期和骑手计数过滤后,子查询按骑手对最大值进行分组。包含查询计算最大值的平均值。