选择SQL表列的平均值X,而不是按X分组

时间:2016-06-22 06:55:26

标签: mysql sql sql-server

出于我的问题的目的,我在MySQL服务器上有一个数据库,其中包含许多出租车的信息(它由两个表history_tripstrip_info组成)。

在history_trips中,每行的有用数据都包含一个唯一的字母数字ID,ride_id,骑手的名字,rider以及骑行结束的时间{{1作为Ymd字符串。

在trip_info中,每行的有用数据类似地包含finishTimeride_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该值。我想知道是否有办法解决这个问题,或者我是否错误地考虑了这个问题。提前感谢您提出的任何建议/解决方案!

1 个答案:

答案 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;

在按日期和骑手计数过滤后,子查询按骑手对最大值进行分组。包含查询计算最大值的平均值。