当多个其他列为true时创建mysql sum列

dwthyt8l  于 2021-06-20  发布在  Mysql
关注(0)|答案(1)|浏览(319)

我想在mysql workbench中创建一个列,当多个列(例如condition、trial、subject、behavior type…)相同时,其中有一个行为持续时间的总和。
我对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

因此,在同一个人的试验中可能会有多个相互作用,我想确定每个试验的总体相互作用持续时间。
但是,我有多个受试者/行为/组每个试验和条件,所以需要一种方法来轻松地计算每个行为的总持续时间时,条件,试验,组,受试者,行为是相同的。
我希望这能让事情更清楚!

2hh7jdfx

2hh7jdfx1#

在最近的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

相关问题