Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/66.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在列索引多次出现的情况下查找值的平均值(mySQL))_Mysql_Average - Fatal编程技术网

在列索引多次出现的情况下查找值的平均值(mySQL))

在列索引多次出现的情况下查找值的平均值(mySQL)),mysql,average,Mysql,Average,我正在建立一个赛马数据库,并想知道是否有任何赛道比其他赛道更快/更慢。我不想仅仅比较每条赛道的平均比赛时间,因为有些赛道包含了经验较少和速度较慢的马的较高比例。为了避免这个错误,我想只使用在两条赛道上都跑过的马来比较每条赛道 到目前为止,我有一个包含 位置、马、平均时间 我想创建一个视图,在第一列中包含每个位置的单个条目。然后,我希望每个地点都有自己的栏,其中包含在两个地点比赛的马匹的平均时间差 例如,我希望输出如下所示: ╔═══════════╦═════════╦═════════╦═══

我正在建立一个赛马数据库,并想知道是否有任何赛道比其他赛道更快/更慢。我不想仅仅比较每条赛道的平均比赛时间,因为有些赛道包含了经验较少和速度较慢的马的较高比例。为了避免这个错误,我想只使用在两条赛道上都跑过的马来比较每条赛道

到目前为止,我有一个包含

位置、马、平均时间

我想创建一个视图,在第一列中包含每个位置的单个条目。然后,我希望每个地点都有自己的栏,其中包含在两个地点比赛的马匹的平均时间差

例如,我希望输出如下所示:

╔═══════════╦═════════╦═════════╦═══════════╗
║.......地点。。。。。。。。║ .....弗莱明。。。。║ ....莫菲特。。。。║ .......考尔菲尔德。。。。。。║
╠═══════════╬═════════╬═════════╬═══════════╣
║ .......弗莱明。。。。。。。。║.......... 0...........║........-0.1........║...........-0.2...........║
║ .......莫菲特。。。。。。。║.........0.1.........║...........0..........║............0.3...........║
║ .......考尔菲尔德。。。。。。║..........0.2........║.........-0.3........║.............0 ............║
╚═══════════╩═════════╩═════════╩═══════════╝


到目前为止,我所拥有的是

选择位置,
(案例
h_adv
位置
当“弗莱明”时,则
h\u adv
AVG\u TIME
结束)作为弗莱明,
(案例
h_adv
位置
当“morphet”时,则
h\u adv
AVG\u TIME
结束)作为
morphet

(案例
h_adv
位置
当“caulfield”时,则
h\u adv
AVG\u TIME
结束)作为
caulfield


但是我不知道如何指定我只想使用在两条赛道上比赛的马的时间,并且我想找出这些平均值之间的差异。任何帮助都将不胜感激。很抱歉那样。提前感谢。

更“SQL”的方法是将数据放在行而不是列中。假设没有马在跑道上跑过一次以上:

select a1.location, a2.location, count(*) as num, avg(time)
from h_adv a1 join
     h_adv a2
     on a1.horse = a2.horse 
group by a1.location, a2.location;
如果马不止一次在给定的赛道上比赛,那么您需要按马和赛道预先聚合数据。否则,您将得到一点笛卡尔积,这将导致平均值偏离:

select a1.location, a2.location, count(*) as num, sum(sumtime) / count(*) as avg
from (select location, horse, count(*) as numraces, sum(time) as sumtime
      from h_adv
      group by location, horse
     ) a1 join
     (select location, horse, count(*) as numraces, sum(time) as sumtime
      from h_adv
      group by location, horse
     ) a2
     on a1.horse = a2.horse 
group by a1.location, a2.location;

SQL在聚合时间等方面往往不好。如果您将时间存储为一个数字,例如秒数,您可能会感觉最好。

啊,好的,我现在正在取得一些进展。是的,每个位置和马只有一个条目,因为我已经找到了每个位置和马的平均值。时间也已使用双精度值存储为秒数。谢谢你的帮助。