小编Ghi*_*que的帖子

有没有更好的方法来计算中位数(不是平均值)

假设我有以下表定义:

CREATE TABLE x (i serial primary key, value integer not null);
Run Code Online (Sandbox Code Playgroud)

我想计算value(不是AVG)的MEDIAN .中位数是在包含相同数量元素的两个子集中划分集合的值.如果元素的数量是偶数,则中位数是最低段中的最大值和最大段的最低值的平均值.(有关详细信息,请参阅维基百科.)

以下是我如何计算MEDIAN,但我想必须有更好的方法:

SELECT AVG(values_around_median) AS median
  FROM (
    SELECT
       DISTINCT(CASE WHEN FIRST_VALUE(above) OVER w2 THEN MIN(value) OVER w3 ELSE MAX(value) OVER w2 END)
        AS values_around_median
      FROM (
        SELECT LAST_VALUE(value) OVER w AS value,
               SUM(COUNT(*)) OVER w > (SELECT count(*)/2 FROM x) AS above
          FROM x
          GROUP BY value
          WINDOW w AS (ORDER BY value)
          ORDER BY value
        ) AS find_if_values_are_above_or_below_median
      WINDOW w2 AS (PARTITION BY …
Run Code Online (Sandbox Code Playgroud)

sql postgresql aggregate-functions

14
推荐指数
3
解决办法
1万
查看次数

如何在sqlalchemy中生成此查询?

我想在sqlalchemy中生成此查询.表'demande'存在于数据库中.有一个子查询使用generate_series函数生​​成时间步长.

SELECT
    timesteps.timestep AS timestep, d.count AS count
FROM
    (SELECT
        DATE_TRUNC('hour',date_demande) AS timestep,
        COUNT(id) AS count
     FROM
        demande
     GROUP BY
        timestep
    ) AS d

RIGHT OUTER JOIN
    (SELECT
        timestep
     FROM
        generate_series('2010-01-01 00:00:00'::timestamp,
                        '2010-01-01 23:59:59'::timestamp,
                        '1 hour'::interval) AS timestep
     ) AS timesteps
  ON d.timestep = timesteps.timestep

ORDER BY timestep;
Run Code Online (Sandbox Code Playgroud)

我试过这个:

stmt = session.query(
        func.
            generate_series(
                datetime.datetime(2010,1,1,0,0,0),
                datetime.datetime(2010,1,1,23,59,59),
                cast('1 hour',Interval())).
            label('timestep')
        ).subquery()
print stmt
q = session.query(
        stmt.c.timestep,
        func.count(Demande.id)).
    outerjoin((Demande, grouped==stmt.c.timestep)).
    group_by(stmt.c.timestep)
print q
Run Code Online (Sandbox Code Playgroud)

但它抱怨InvalidRequesError:无法找到要加入的FROM子句.我想这是由子查询引起的.

如果我试图"反转"查询,它可以工作,但它做'左外连接':

q = session.query(
        func.count(Demande.id),
        stmt.c.timestep).
    outerjoin((stmt, …
Run Code Online (Sandbox Code Playgroud)

sql postgresql sqlalchemy

6
推荐指数
1
解决办法
3706
查看次数

有没有更好的方法来提取一天的时间?

我正试图从PostgreSQL中的'timestamp'列中提取时间.我是这样做的,但是......太可怕了.如何做得更好?

SELECT (
    date_part('hour', date_demande)::text   || ' hours '   ||
    date_part('minute', date_demande)::text || ' minutes ' ||
    date_part('second', date_demande)::text || ' seconds'
    )::interval AS time_of_day

FROM table;
Run Code Online (Sandbox Code Playgroud)

sql postgresql

6
推荐指数
2
解决办法
1515
查看次数

Git可以合并“使用” git blame -C找到的信息吗?

读完这个问题后,我想到了这个问题:Git真的可以跟踪单个功能从一个文件到另一个文件的移动吗?如果是这样,怎么办?

这是worfklow:

“很久以前”,我们将一个大文件拆分为folder/file.py许多文件:folder1/file.pyfolder2/file.py依此类推。

git blame -C当我们查看时folder2/file.py,正确显示了该代码的历史记录,我们看到一些提交是在拆分之前进行的。

问题是我们继续维护仍然具有的旧版本代码,folder/file.py当我们将修补程序合并回“当前”版本时,git继续重新创建该文件夹folder,并且看不到folder/file.py应将所做的修补程序合并到其中folder1/file.pyfolder2/file.py取决于此代码块现在位于何处。

我快速看了一下,git help merge但没有发现任何东西。

git git-merge branching-and-merging

5
推荐指数
1
解决办法
147
查看次数

如何获得一周中每一天的移动平均值?

我以一个小时的粒度将数据放入石墨中。例如

2013-12-06-12:00    15
2013-12-08-09:00    14
2013-12-09-12:00     3
2013-12-13-00:00    10
2013-12-14-08:00    20
2013-12-14-09:00     1
2013-12-15-00:00     5
2013-12-16-00:00    11
2013-12-16-02:00    12
Run Code Online (Sandbox Code Playgroud)

... 等等

现在,我希望能够将其绘制为“一周中每一天的值的演变”,因此显示的实际值是几周内特定日期的值的总和(或平均值) (例如,假设 2 周)。

如果我只看上周,我的图表看起来像这样:

  ^       21
20|       |
  |       |
  |   12.5|       13
10|   |   |   9.5 |
  |   |   |   |   |
  |   |   |   |   |
 0+--------------------------------->
   Mon Tue Wed Thu Fri Sat Sun
    12  13  14  15  16
Run Code Online (Sandbox Code Playgroud)

因此,例如,对于“星期五”点,它取今天 (11+12) 的值、上星期五 (3) 的值并取两者的平均值 ((11+12)+3)/2

这可能吗,如何?

graphite

3
推荐指数
1
解决办法
7241
查看次数