我有一个数据库,包括表单的“日期”字段,例如“2012-06-13 23:34:52+00”和“情绪”字段,包括-1和1之间的双符号值。我想要什么是计算平均情绪,按一天中的每个小时分组。例如,我希望得到下表:
小时......平均情绪 00 ...... 0.5 01 .... -0.2 ... 24 ...... 0.7
我想我必须使用 group by、avg 函数和一些通配符来从“Date”中提取小时。如果有人更有经验,请帮助我找到最有效的查询方式。
谢谢你。
如果我知道您的 DBMS,答案应该会更好。<functionToGetHour>
将取决于您的 DBMS。
AVG 是(如果我没记错的话)ANSI SQL。
这个想法是这样的。
如果你想要每个小时的结果,即使那个小时没有“情绪”,这是可能的,但有点复杂。
SELECT t1.<functionToGetHour>(Date), AVG(t1.Sentiment)
FROM <YOURTABLE> t1
GROUP BY t1.<functionToGetHour>(Date)
编辑
使用 Google API(如果我们谈论的是https://developers.google.com/chart/interactive/docs/querylanguage?hl=fr)
select hour(datetime `Date`), avg(sentiment) group by hour(datetime `Date`)
date 是保留关键字,因此将其用作字段是一个相当糟糕的主意。不知道 google API 是否区分大小写...
select to_char(date_field, 'YYYY MM DD HH'), average(sentiment) # to_char= oracle
from sentimemt_table
group by to_char(date_field, 'YYYY MM DD HH')
# mySQL: DATE_FORMAT(date_field, '%Y %M %D %H') instead of to_char
# Postgres: to_char(date_field, 'YYYY:MM:DD:HH24')
# SQLServer: CONVERT(VARCHAR(20), date_field(), 120)