gpt4 book ai didi

mysql - 如何优化这个mysql程序代码

转载 作者:行者123 更新时间:2023-11-29 16:04:55 25 4
gpt4 key购买 nike

我有这个工作mysql程序有没有办法用for循环来检查时间以最小化代码这是我想要平均一天 2 小时周期的过程代码,该天由参数 daydate 定义以及从“00:00:00”到“24:00:00”的时间

CREATE DEFINER=`user`@`localhost` PROCEDURE `proceduregetavgperday`(IN daydate date)
BEGIN
(select IFNULL(ROUND(AVG(`viewemotionavgbydateandtime`.`Happiness`), 2),0) AS `Happiness`,
IFNULL(ROUND(AVG(`viewemotionavgbydateandtime`.`Anger`), 2),0) AS `Anger`,
IFNULL(ROUND(AVG(`viewemotionavgbydateandtime`.`Contempt`), 2),0) AS `Contempt`,
IFNULL(ROUND(AVG(`viewemotionavgbydateandtime`.`Disgust`), 2),0) AS `Disgust`,
IFNULL(ROUND(AVG(`viewemotionavgbydateandtime`.`Fear`), 2),0) AS `Fear`,
IFNULL(ROUND(AVG(`viewemotionavgbydateandtime`.`Neutral`), 2),0) AS `Neutral`,
IFNULL(ROUND(AVG(`viewemotionavgbydateandtime`.`Sadness`), 2),0) AS `Sadness`,
IFNULL(ROUND(AVG(`viewemotionavgbydateandtime`.`Surprise`), 2),0) AS `Surprise`,
"00:00:00" as "Hour"
from viewemotionavgbydateandtime where `Time` >= '00:00:00' and `Time` < '02:00:00' and `Date`=daydate)
union
(select IFNULL(ROUND(AVG(`viewemotionavgbydateandtime`.`Happiness`), 2),0) AS `Happiness`,
IFNULL(ROUND(AVG(`viewemotionavgbydateandtime`.`Anger`), 2),0) AS `Anger`,
IFNULL(ROUND(AVG(`viewemotionavgbydateandtime`.`Contempt`), 2),0) AS `Contempt`,
IFNULL(ROUND(AVG(`viewemotionavgbydateandtime`.`Disgust`), 2),0) AS `Disgust`,
IFNULL(ROUND(AVG(`viewemotionavgbydateandtime`.`Fear`), 2),0) AS `Fear`,
IFNULL(ROUND(AVG(`viewemotionavgbydateandtime`.`Neutral`), 2),0) AS `Neutral`,
IFNULL(ROUND(AVG(`viewemotionavgbydateandtime`.`Sadness`), 2),0) AS `Sadness`,
IFNULL(ROUND(AVG(`viewemotionavgbydateandtime`.`Surprise`), 2),0) AS `Surprise`,
"02:00:00" as "Hour"
from viewemotionavgbydateandtime where `Time` >= '02:00:00' and `Time` < '04:00:00' and `Date`=daydate)
union
(select IFNULL(ROUND(AVG(`viewemotionavgbydateandtime`.`Happiness`), 2),0) AS `Happiness`,
IFNULL(ROUND(AVG(`viewemotionavgbydateandtime`.`Anger`), 2),0) AS `Anger`,
IFNULL(ROUND(AVG(`viewemotionavgbydateandtime`.`Contempt`), 2),0) AS `Contempt`,
IFNULL(ROUND(AVG(`viewemotionavgbydateandtime`.`Disgust`), 2),0) AS `Disgust`,
IFNULL(ROUND(AVG(`viewemotionavgbydateandtime`.`Fear`), 2),0) AS `Fear`,
IFNULL(ROUND(AVG(`viewemotionavgbydateandtime`.`Neutral`), 2),0) AS `Neutral`,
IFNULL(ROUND(AVG(`viewemotionavgbydateandtime`.`Sadness`), 2),0) AS `Sadness`,
IFNULL(ROUND(AVG(`viewemotionavgbydateandtime`.`Surprise`), 2),0) AS `Surprise`,
"04:00:00" as "Hour"
from viewemotionavgbydateandtime where `Time` >= '04:00:00' and `Time` < '06:00:00' and `Date`=daydate)
union
(select IFNULL(ROUND(AVG(`viewemotionavgbydateandtime`.`Happiness`), 2),0) AS `Happiness`,
IFNULL(ROUND(AVG(`viewemotionavgbydateandtime`.`Anger`), 2),0) AS `Anger`,
IFNULL(ROUND(AVG(`viewemotionavgbydateandtime`.`Contempt`), 2),0) AS `Contempt`,
IFNULL(ROUND(AVG(`viewemotionavgbydateandtime`.`Disgust`), 2),0) AS `Disgust`,
IFNULL(ROUND(AVG(`viewemotionavgbydateandtime`.`Fear`), 2),0) AS `Fear`,
IFNULL(ROUND(AVG(`viewemotionavgbydateandtime`.`Neutral`), 2),0) AS `Neutral`,
IFNULL(ROUND(AVG(`viewemotionavgbydateandtime`.`Sadness`), 2),0) AS `Sadness`,
IFNULL(ROUND(AVG(`viewemotionavgbydateandtime`.`Surprise`), 2),0) AS `Surprise`,
"06:00:00" as "Hour"
from viewemotionavgbydateandtime where `Time` >= '06:00:00' and `Time` < '08:00:00' and `Date`=daydate)
union
(select IFNULL(ROUND(AVG(`viewemotionavgbydateandtime`.`Happiness`), 2),0) AS `Happiness`,
IFNULL(ROUND(AVG(`viewemotionavgbydateandtime`.`Anger`), 2),0) AS `Anger`,
IFNULL(ROUND(AVG(`viewemotionavgbydateandtime`.`Contempt`), 2),0) AS `Contempt`,
IFNULL(ROUND(AVG(`viewemotionavgbydateandtime`.`Disgust`), 2),0) AS `Disgust`,
IFNULL(ROUND(AVG(`viewemotionavgbydateandtime`.`Fear`), 2),0) AS `Fear`,
IFNULL(ROUND(AVG(`viewemotionavgbydateandtime`.`Neutral`), 2),0) AS `Neutral`,
IFNULL(ROUND(AVG(`viewemotionavgbydateandtime`.`Sadness`), 2),0) AS `Sadness`,
IFNULL(ROUND(AVG(`viewemotionavgbydateandtime`.`Surprise`), 2),0) AS `Surprise`,
"08:00:00" as "Hour"
from viewemotionavgbydateandtime where `Time` >= '08:00:00' and `Time` < '10:00:00' and `Date`=daydate)
union
(select IFNULL(ROUND(AVG(`viewemotionavgbydateandtime`.`Happiness`), 2),0) AS `Happiness`,
IFNULL(ROUND(AVG(`viewemotionavgbydateandtime`.`Anger`), 2),0) AS `Anger`,
IFNULL(ROUND(AVG(`viewemotionavgbydateandtime`.`Contempt`), 2),0) AS `Contempt`,
IFNULL(ROUND(AVG(`viewemotionavgbydateandtime`.`Disgust`), 2),0) AS `Disgust`,
IFNULL(ROUND(AVG(`viewemotionavgbydateandtime`.`Fear`), 2),0) AS `Fear`,
IFNULL(ROUND(AVG(`viewemotionavgbydateandtime`.`Neutral`), 2),0) AS `Neutral`,
IFNULL(ROUND(AVG(`viewemotionavgbydateandtime`.`Sadness`), 2),0) AS `Sadness`,
IFNULL(ROUND(AVG(`viewemotionavgbydateandtime`.`Surprise`), 2),0) AS `Surprise`,
"10:00:00" as "Hour"
from viewemotionavgbydateandtime where `Time` >= '10:00:00' and `Time` < '12:00:00' and `Date`=daydate)
union
(select IFNULL(ROUND(AVG(`viewemotionavgbydateandtime`.`Happiness`), 2),0) AS `Happiness`,
IFNULL(ROUND(AVG(`viewemotionavgbydateandtime`.`Anger`), 2),0) AS `Anger`,
IFNULL(ROUND(AVG(`viewemotionavgbydateandtime`.`Contempt`), 2),0) AS `Contempt`,
IFNULL(ROUND(AVG(`viewemotionavgbydateandtime`.`Disgust`), 2),0) AS `Disgust`,
IFNULL(ROUND(AVG(`viewemotionavgbydateandtime`.`Fear`), 2),0) AS `Fear`,
IFNULL(ROUND(AVG(`viewemotionavgbydateandtime`.`Neutral`), 2),0) AS `Neutral`,
IFNULL(ROUND(AVG(`viewemotionavgbydateandtime`.`Sadness`), 2),0) AS `Sadness`,
IFNULL(ROUND(AVG(`viewemotionavgbydateandtime`.`Surprise`), 2),0) AS `Surprise`,
"12:00:00" as "Hour"
from viewemotionavgbydateandtime where `Time` >= '12:00:00' and `Time` < '14:00:00' and `Date`=daydate)

;
END

最佳答案

所以我找到了一个使用 for 的解决方案

CREATE DEFINER=`root`@`localhost` PROCEDURE `proceduregetavgperdayfor`(IN daydate date)
BEGIN

declare TimeVar Time;
declare Step Time;
DROP TABLE if exists ResultTable;
CREATE TEMPORARY table ResultTable (`Anger` float,`Contempt` float,`Disgust` float,`Fear` float,`Happiness` float,`Neutral` float,`Sadness` float,`Surprise` float,`Houre` varchar(50));

SET TimeVar='00:00:00';
SET Step='02:00:00';

loop1: LOOP
insert into ResultTable
select IFNULL(ROUND(AVG(`viewemotionavgbydateandtime`.`Happiness`), 2),0) AS `Happiness`,
IFNULL(ROUND(AVG(`viewemotionavgbydateandtime`.`Anger`), 2),0) AS `Anger`,
IFNULL(ROUND(AVG(`viewemotionavgbydateandtime`.`Contempt`), 2),0) AS `Contempt`,
IFNULL(ROUND(AVG(`viewemotionavgbydateandtime`.`Disgust`), 2),0) AS `Disgust`,
IFNULL(ROUND(AVG(`viewemotionavgbydateandtime`.`Fear`), 2),0) AS `Fear`,
IFNULL(ROUND(AVG(`viewemotionavgbydateandtime`.`Neutral`), 2),0) AS `Neutral`,
IFNULL(ROUND(AVG(`viewemotionavgbydateandtime`.`Sadness`), 2),0) AS `Sadness`,
IFNULL(ROUND(AVG(`viewemotionavgbydateandtime`.`Surprise`), 2),0) AS `Surprise`,
TimeVar as "Hour"
from viewemotionavgbydateandtime where `Time` >= TimeVar and `Time` < TimeVar+Step and `Date`=daydate;
SET TimeVar=TimeVar+Step;
IF TimeVar>'24:00:00' THEN
LEAVE loop1;
END IF;
ITERATE loop1;
END Loop loop1;
select * from ResultTable;
END

关于mysql - 如何优化这个mysql程序代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55835594/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com