以平均每小时转置SQLite行和列

前端之家收集整理的这篇文章主要介绍了以平均每小时转置SQLite行和列前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我在sqlite中有一个名为param_vals_breaches的表,如下所示:
  1. id param queue date_time param_val breach_count
  2. 1 c a 2013-01-01 00:00:00 188 7
  3. 2 c b 2013-01-01 00:00:00 156 8
  4. 3 c c 2013-01-01 00:00:00 100 2
  5. 4 d a 2013-01-01 00:00:00 657 0
  6. 5 d b 2013-01-01 00:00:00 23 6
  7. 6 d c 2013-01-01 00:00:00 230 12
  8. 7 c a 2013-01-01 01:00:00 100 0
  9. 8 c b 2013-01-01 01:00:00 143 9
  10. 9 c c 2013-01-01 01:00:00 12 2
  11. 10 d a 2013-01-01 01:00:00 0 1
  12. 11 d b 2013-01-01 01:00:00 29 5
  13. 12 d c 2013-01-01 01:00:00 22 14
  14. 13 c a 2013-01-01 02:00:00 188 7
  15. 14 c b 2013-01-01 02:00:00 156 8
  16. 15 c c 2013-01-01 02:00:00 100 2
  17. 16 d a 2013-01-01 02:00:00 657 0
  18. 17 d b 2013-01-01 02:00:00 23 6
  19. 18 d c 2013-01-01 02:00:00 230 12

我想写一个查询,它将显示一个特定的队列(例如“a”),每个小时的基础上每个参数的平均值为param_val和breach_count.因此,转换数据以获得如下所示的内容

  1. Results for Queue A
  2.  
  3. Hour 0 Hour 0 Hour 1 Hour 1 Hour 2 Hour 2
  4. param avg_param_val avg_breach_count avg_param_val avg_breach_count avg_param_val avg_breach_count
  5. c xxx xxx xxx xxx xxx xxx
  6. d xxx xxx xxx xxx xxx xxx

这可能吗?我不知道该怎么做.谢谢!

sqlite没有PIVOT函数,但您可以使用带有CASE表达式的聚合函数将行转换为列:
  1. select param,avg(case when time = '00' then param_val end) AvgHour0Val,avg(case when time = '00' then breach_count end) AvgHour0Count,avg(case when time = '01' then param_val end) AvgHour1Val,avg(case when time = '01' then breach_count end) AvgHour1Count,avg(case when time = '02' then param_val end) AvgHour2Val,avg(case when time = '02' then breach_count end) AvgHour2Count
  2. from
  3. (
  4. select param,strftime('%H',date_time) time,param_val,breach_count
  5. from param_vals_breaches
  6. where queue = 'a'
  7. ) src
  8. group by param;

SQL Fiddle with Demo

猜你在找的Sqlite相关文章