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

时间:2018-08-30 11:18:26

标签: mysql if-statement sum mysql-workbench

我想在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  

因此,同一个人在一个试验中可能存在多种互动,我想确定每个试验的总体互动持续时间。

但是我每个试验和条件都有多个主题/行为/组,因此需要一种方法来轻松计算条件,试验,组,主题,行为相同时每种行为的总持续时间。

我希望这可以使其更清楚!

1 个答案:

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