我正在使用一个小型的MariaDB数据库。每个用户提取时间间隔,我用下面的查询:如何避免SQL中重复的SELECT短语(MariaDB)
SELECT
SUM(TIMESTAMPDIFF(SECOND,Activity.startTime,Activity.endTime)) AS seconds,
TIME_FORMAT(SEC_TO_TIME(SUM(TIMESTAMPDIFF(SECOND,Activity.startTime,Activity.endTime))),'%Hh %im %ss') AS formattedTime,
TSUser.name
FROM Activity
INNER JOIN User ON User.id = Activity.userID
GROUP BY User.id
ORDER BY seconds DESC;
我必须选择的时间以纯秒(... AS seconds
)能够通过它,订购的结果可以在我的查询中可以看出。
但是,我也希望MariaDB格式化时间间隔,因为我使用TIME_FORMAT
函数。问题是,我必须再次在TIME_FORMAT
调用中复制整个SUM(...)
短语。这看起来不太优雅。 MariaDB会识别重复并只计算一次SUM
?另外,有没有办法得到相同的结果,而不复制SUM
?
我想这应该是可能的嵌套查询构造像这样:
SELECT
innerQuery.name,
innerQuery.seconds,
TIME_FORMAT(SEC_TO_TIME(innerQuery.seconds), '%Hh %im')
FROM (
//Do the sum here, once.
) AS innerQuery
ORDER BY innerQuery.seconds DESC;
这是做/“OK”做最好的方法是什么?
注意:我不需要结果中的原始秒数,只需要格式化的时间。
我很感激帮助,谢谢。
好的,谢谢你的建议。你是对的,上面例子中的时间格式可以用来正确地排序结果。在我的测试过程中,这失败了一次,我可能使用了不同的时间格式。 – Bensge