按日期sql组再找avg

时间:2012-06-27 11:49:38

标签: sql date group-by wildcard average

我有一个数据库,包括表格的“日期”字段,例如“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”中提取小时。如果有人更有经验,请帮我找到最有效的查询方式。

谢谢。

2 个答案:

答案 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)