我想在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
因此,同一个人在一个试验中可能存在多种互动,我想确定每个试验的总体互动持续时间。
但是我每个试验和条件都有多个主题/行为/组,因此需要一种方法来轻松计算条件,试验,组,主题,行为相同时每种行为的总持续时间。
我希望这可以使其更清楚!
答案 0 :(得分:0)
AFAIK在最近的MySQL版本中增加了对窗口功能的支持。这些功能似乎可以用来解决您的问题。我没有测试它,但是它会像这样使用:
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