我有一个数据库,包括表格的“日期”字段,例如“2012-06-13 23:34:52 + 00”和字段“Sentiment”,包括-1和1之间的双重签名值。我想要的是计算平均情绪,按一天中的每个小时分组。例如,我希望得到以下表格:
Hour......Average Sentiment 00 ......... 0.5 01 ......... -0.2 ... 24 ......... 0.7
我想我必须使用group by,avg函数和可能的一些通配符来从“Date”中提取小时。如果有人更有经验,请帮我找到最有效的查询方式。
谢谢。
答案 0 :(得分:1)
如果我知道您的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是一个保留关键字,因此将它用作字段是一个相当糟糕的主意。不知道谷歌API是否区分大小写...
答案 1 :(得分:0)
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)