2012-06-27 55 views
1

我有一个数据库,包括形式的字段“日期”,例如, “2012-06-13 23:34:52 + 00”和“Sentiment”字段,包括-1和1之间的双重有符号值。我想要计算的是每天每小时分组的平均情绪。例如,我想下面的表格有结果:Sql按日期分组,然后找到平均值

 
Hour......Average Sentiment 
00 ......... 0.5 
01 ......... -0.2 
... 
24 ......... 0.7 

我想我得通过,AVG的功能,可能有一些通配符使用组来提取“日期”小时。如果有人更有经验,请帮助我找到查询这种最有效的方法。

谢谢。

+0

你的dbms(mysql,sql server ...)的名字会有所帮助。日期字段的类型也是。 –

+0

我目前在Google Docs上以电子表格的形式显示此内容,并计划使用Google js API查询它。 “数据”字段是文本格式。谢谢。 –

+0

对不起,不知道Google电子表格应该用作db,而Google js API是用作“SQL语言”。然后看到我的编辑。 –

回答

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) 
1

如果我知道你的数据库管理系统,答案应该会更好。 <functionToGetHour>将取决于您的DBMS。

AVG是(如果我没有错)ANSI SQL。

这个想法就是这样的。

如果您想要每小时都有结果,即使该小时没有“情感”,也是可能的,但有点复杂。

SELECT t1.<functionToGetHour>(Date), AVG(t1.Sentiment) 
FROM <YOURTABLE> t1 
GROUP BY t1.<functionToGetHour>(Date) 

编辑

与谷歌API(如果我们谈论https://developers.google.com/chart/interactive/docs/querylanguage?hl=fr

select hour(datetime `Date`), avg(sentiment) group by hour(datetime `Date`) 

日期是一个保​​留关键字,所以这是一个相当糟糕的主意,用它作为领域。不知道是谷歌API区分大小写...