Создать MySQL столбец суммы, когда несколько других столбцов являются истинными - PullRequest
0 голосов
/ 30 августа 2018

Я хочу создать столбец в MySQL Workbench, где есть сумма продолжительности поведения , когда несколько столбцов (например, условие, триал, субъект, тип поведения .. .) подобные.

Я относительно новичок в работе с 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 голосов
/ 30 августа 2018

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

...