当前位置: 首页 > 面试题库 >

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

凌经赋
2023-03-14
问题内容

我在SQLite中有一个名为param_vals_breaches的表,如下所示:

id    param       queue       date_time              param_val    breach_count
1     c           a           2013-01-01 00:00:00    188          7
2     c           b           2013-01-01 00:00:00    156          8
3     c           c           2013-01-01 00:00:00    100          2
4     d           a           2013-01-01 00:00:00    657          0
5     d           b           2013-01-01 00:00:00    23           6
6     d           c           2013-01-01 00:00:00    230          12
7     c           a           2013-01-01 01:00:00    100          0
8     c           b           2013-01-01 01:00:00    143          9
9     c           c           2013-01-01 01:00:00    12           2
10    d           a           2013-01-01 01:00:00    0            1
11    d           b           2013-01-01 01:00:00    29           5
12    d           c           2013-01-01 01:00:00    22           14
13    c           a           2013-01-01 02:00:00    188          7
14    c           b           2013-01-01 02:00:00    156          8
15    c           c           2013-01-01 02:00:00    100          2
16    d           a           2013-01-01 02:00:00    657          0
17    d           b           2013-01-01 02:00:00    23           6
18    d           c           2013-01-01 02:00:00    230          12

我想编写一个查询,以小时为基础,向我显示一个特定的队列(例如“ a ”),每个队列的平均 参数param_val
违规 数。因此,转置数据以获得如下所示的内容:

Results for Queue A

         Hour 0         Hour 0              Hour 1         Hour 1              Hour 2         Hour 2
param    avg_param_val  avg_breach_count    avg_param_val  avg_breach_count    avg_param_val  avg_breach_count
c        xxx            xxx                 xxx            xxx                 xxx            xxx
d        xxx            xxx                 xxx            xxx                 xxx            xxx

这可能吗?我不确定该怎么做。谢谢!


问题答案:

SQLite没有PIVOT函数,但是您可以将聚合函数与CASE表达式结合使用,以将行变成列:

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
from
(
  select param,
    strftime('%H', date_time) time,
    param_val,
    breach_count
  from param_vals_breaches
  where queue = 'a'
) src
group by param;

参见带有演示的SQL Fiddle



 类似资料:
  • 取一定时间内的平均值 用法 Your browser does not support the video tag. 案例:数据变化趋势 功能:加入平均值和不加平均值的折线图形成对比,显示数字改变的规律 工作原理 结果将会是一段时间段输入的平均值。你可以设置配置项中的时间段长度(工程师叫它采样窗) 提示 短的采样窗意为着输出对输入变化的反应更敏感。

  • Python是否有一个SciPy函数或NumPy函数或模块来计算给定特定窗口的一维数组的运行平均值?

  • 问题内容: 我的表中有一列具有FLOAT类型的值。如何获得此列中所有元素的平均值? 问题答案: 这将平均所有行。要平均子集,请使用子句。要平均每个组(某物),请使用by子句。

  • 问题内容: 我无法获得熊猫列的平均值或均值。有一个数据框。我在下面尝试的任何事情都没有给我该列的平均值 以下返回几个值,而不是一个: 这样: 问题答案: 如果您只想要列的均值,请选择列(这是一个系列),然后调用:

  • 我不能得到熊猫的平均值或平均值。有一个数据框。下面我尝试的东西都没有给我列的平均值 以下内容返回多个值,而不是一个值: 这也是:

  • 我是新来的。任何帮助都将不胜感激 这是我的原始数据: 我想得到的是: 1创建一个新的列调用平均值,以计算每个提要的平均市值。 2求加权平均数。 这是我当前的代码,我得到NaN: 对于加权平均代码: 我得到了一个错误: AttributeError:“Series”对象没有属性“value”