我想在mysql工作台中创建一个列,当多个列(例如条件,试验,主题,行为类型...)相同时,存在行为持续时间的总和。
我对使用sql还是比较陌生,到目前为止,大多数人只是将其用于提取数据。这有可能吗?如果是这样,我该怎么办?
谢谢 :)
编辑-数据将是这样的
Condition Trial Group Subject Behaviour Duration **TotalDuration**
np 1 XX GBF132 interact 00:00:42
np 1 XX GBF132 interact 00:00:17
yp 1 ZZ HJR543 interact 00:01:03
yp 1 ZZ HJR543 interact 00:00:26
因此,同一个人在一个试验中可能会有多种互动,我想确定每次试验的总体互动持续时间。
但是我每个试验和条件都有多个主题/行为/组,因此当条件,试验,组,主题,行为相同时,需要一种轻松计算每种行为的总持续时间的方法。
我希望这可以使它更清晰!
最佳答案
在最近的MySQL版本中,AFAIK添加了对窗口功能的支持。这些功能似乎可以用来解决您的问题。我没有对其进行测试,但是它的使用方式如下:
SELECT
`condition`, `trial`, `group`, `subject`, `behaviour`,
`duration`,
SEC_TO_TIME(SUM(TIME_TO_SEC(`duration`))) OVER (PARTITION BY condition`, `trial`, `group`, `subject`, `behaviour`) AS timeSum
FROM `tests`;
无论如何,对于旧版本的MySQL,以下选项可能适用于您:
SELECT
`condition`,
`trial`,
`group`,
`subject`,
`behaviour`,
`duration`, SEC_TO_TIME(SUM(TIME_TO_SEC(`duration`)))
FROM `tests`
GROUP BY `condition`, `trial`,`group`, `subject`,`behaviour`;
但是那样一来,您将失去“细节”。要复制窗口函数的工作方式,您将需要使用以下方法:
SELECT `t1`.`condition`, `t1`.`trial`,`t1`.`group`, `t1`.`subject`,`t1`.`behaviour`, `t2`.`duration`,`t1`.`totalTime` FROM (SELECT
`condition`,
`trial`,
`group`,
`subject`,
`behaviour`,
`duration`, SEC_TO_TIME(SUM(TIME_TO_SEC(`duration`))) AS totalTime
FROM `tests` AS subt1
GROUP BY `condition`, `trial`,`group`, `subject`,`behaviour`) AS t1
JOIN `tests` AS t2 USING (`condition`, `trial`,`group`, `subject`,`behaviour`);
这是我玩过的代码片段:http://sqlfiddle.com/#!9/e002f2/12/0