假设我有以下表定义:
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) 我想在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) 我正试图从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) 读完这个问题后,我想到了这个问题:Git真的可以跟踪单个功能从一个文件到另一个文件的移动吗?如果是这样,怎么办?
这是worfklow:
“很久以前”,我们将一个大文件拆分为folder/file.py许多文件:folder1/file.py,folder2/file.py依此类推。
git blame -C当我们查看时folder2/file.py,正确显示了该代码的历史记录,我们看到一些提交是在拆分之前进行的。
问题是我们继续维护仍然具有的旧版本代码,folder/file.py当我们将修补程序合并回“当前”版本时,git继续重新创建该文件夹folder,并且看不到folder/file.py应将所做的修补程序合并到其中folder1/file.py或folder2/file.py取决于此代码块现在位于何处。
我快速看了一下,git help merge但没有发现任何东西。
我以一个小时的粒度将数据放入石墨中。例如
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
这可能吗,如何?