[英]Incorporate WHERE and GROUP BY into datetime sum MySQL query
我正在尝试按类别汇总“持续时间”列:
SELECT DATE_FORMAT(FROM_UNIXTIME(sum(`duration`)), '%T') AS `totalduration`
FROM `my_custom_table`
WHERE `category` = "SLE"
GROUP BY `category`
结果为NULL,但应为“ 05:00”。
如果我排除WHERE和GROUP BY,查询将正确汇总:
SELECT DATE_FORMAT(FROM_UNIXTIME(sum(`duration`)), '%T') AS `totalduration`
FROM `my_custom_table`
结果正确是24:00:00。
如何将WHERE和GROUP BY合并到查询中?
phpMyAdmin / MySQL表,由“ duration”列(日期时间)和“ category”列(varchar 255)组成:
0000-00-00 05:00:00 | SLE
0000-00-00 00:30:00 | CLA
0000-00-00 00:30:00 | CLA
0000-00-00 00:15:00 | FOO
0000-00-00 01:45:00 | MON
0000-00-00 00:30:00 | CLA
0000-00-00 01:30:00 | MON
0000-00-00 02:30:00 | CLE
0000-00-00 01:00:00 | CLA
0000-00-00 01:30:00 | MON
0000-00-00 01:00:00 | REC
0000-00-00 00:30:00 | CLA
0000-00-00 01:30:00 | MON
0000-00-00 00:45:00 | CLA
0000-00-00 01:00:00 | FOO
0000-00-00 01:00:00 | REC
0000-00-00 01:00:00 | REC
0000-00-00 01:00:00 | MON
0000-00-00 00:15:00 | NOT
0000-00-00 00:30:00 | CLA
0000-00-00 00:30:00 | CLA
我已经为您创建了一个SQLFiddle: http ://sqlfiddle.com/#!9/f31e6a/6/0
查询:
SELECT category, SEC_TO_TIME(SUM(TIME_TO_SEC(duration)))
FROM test
WHERE category = 'SLE'
GROUP BY category;
测试数据:
CREATE TABLE test (duration DATETIME, category TEXT);
INSERT INTO test (duration, category) VALUES
('0000-00-00 05:00:00', 'SLE'),
('0000-00-00 00:30:00', 'CLA'),
('0000-00-00 00:30:00', 'CLA'),
('0000-00-00 00:15:00', 'FOO'),
('0000-00-00 01:45:00', 'MON'),
('0000-00-00 00:30:00', 'CLA'),
('0000-00-00 01:30:00', 'MON'),
('0000-00-00 02:30:00', 'CLE'),
('0000-00-00 01:00:00', 'CLA'),
('0000-00-00 01:30:00', 'MON'),
('0000-00-00 01:00:00', 'REC'),
('0000-00-00 00:30:00', 'CLA'),
('0000-00-00 01:30:00', 'MON'),
('0000-00-00 00:45:00', 'CLA'),
('0000-00-00 01:00:00', 'FOO'),
('0000-00-00 01:00:00', 'REC'),
('0000-00-00 01:00:00', 'REC'),
('0000-00-00 01:00:00', 'MON'),
('0000-00-00 00:15:00', 'NOT'),
('0000-00-00 00:30:00', 'CLA'),
('0000-00-00 00:30:00', 'CLA');
以及相应的结果:
category SEC_TO_TIME(SUM(TIME_TO_SEC(duration)))
SLE 05:00:00
SELECT DATE_FORMAT(FROM_UNIXTIME(sum(`duration`)), '%T') AS `totalduration`
FROM `my_custom_table`
GROUP BY `category`
HAVING category = "SLE"
我认为不需要使用group by,因为where子句仅返回一个数据。因此,您可以执行以下操作。
SELECT DATE_FORMAT(FROM_UNIXTIME(sum(`duration`)), '%T') AS `totalduration`
FROM `my_custom_table`
WHERE `category` = "SLE"
如果仍然返回null,则可以执行以下操作。
SELECT DATE_FORMAT(FROM_UNIXTIME(sum(`duration`)), '%T') AS `totalduration`
FROM `my_custom_table`
WHERE `category` LIKE "%SLE%"
只需使用to_seconds()
:
select sum(to_seconds(duration))
如果您希望使用时间格式:
select sec_to_time(sum(to_seconds(duration)))
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.