标签: aggregate-functions

获取每天创建的条目数

假设我有一个这样的搜索查询:

SELECT COUNT(id), date(created_at)
FROM entries
WHERE date(created_at) >= date(current_date - interval '1 week')
GROUP BY date(created_at)
Run Code Online (Sandbox Code Playgroud)

如您所知,例如我得到的结果如下:

count | date
  2   |  15.01.2014
  1   |  13.01.2014
  9   |  09.01.2014
Run Code Online (Sandbox Code Playgroud)

但我没有得到一周中没有创建条目的日子。

如何获得如下所示的搜索结果,包括没有创建条目的日期?

count | date
  2   |  15.01.2014
  0   |  14.01.2014
  1   |  13.01.2014
  0   |  12.01.2014
  0   |  11.01.2014
  0   |  10.01.2014
  9   |  09.01.2014
Run Code Online (Sandbox Code Playgroud)

sql postgresql aggregate-functions generate-series

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

PostgreSQL:使用某种排序条件对元素数组进行排序

假设您需要numranges按左边界降序对数组进行排序。下面的做法是最简单的:将unnest数组放入表中,对表进行排序,然后array_agg将其放回到数组中。这在代码中看起来怎么样?这是我的非工作尝试:

DO $$
DECLARE
    x numrange[] := '{"[0, 3]", "[0, 1]", "[3, 5]", "[3, 8]"}';
BEGIN

    x := (
          WITH x AS (
              SELECT xrow FROM unnest(x) AS xrow
          )
          SELECT array_agg(xrow) FROM x ORDER BY lower(xrow) DESC
    );
    RAISE NOTICE '%', x;
END;
$$;
Run Code Online (Sandbox Code Playgroud)

arrays sorting postgresql sql-order-by aggregate-functions

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

Python DataFrame 中 Timedelta 值的聚合

我有一个大 DataFrame (df),如下所示:

  Acc_num date_diff
0 29 0:04:43
1 29 0:01:43
2 29 2:22:45
3 29 0:16:21
4月29日 0:58:20
5 30 0:00:35
6 34 7:15:26
7 34 4:40:01
8 34 0:56:02
9 34 6:53:44
10 34 1:36:58
……
Acc_num int64
date_diff timedelta64[ns]
数据类型:对象

我需要计算每个帐号的“date_diff”平均值(以 timedelta 格式)。
df.date_diff.mean()工作正常。但是当我尝试下一步时:
df.groupby('Acc_num').date_diff.mean()它引发了一个异常:

“数据错误:没有要聚合的数字类型”

我也尝试过df.pivot_table()方法,但没有取得任何成果。

有人可以帮我解决这个问题吗?先感谢您!

python aggregate-functions timedelta dataframe

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

MySQL Select Query 生成动态列结果

我需要编写一个动态返回列的查询。例如,我有一个包含列的表 tblTest:

Id, Name,   Type,  Amount
1, Receipt, Cash   100
2, Receipt, Card   200
3, Receipt, Cheque 250
4, Receipt, Card   150
5, Receipt, Cash   100
6, Payment, Cash   300
7, Payment, Cheque 400
Run Code Online (Sandbox Code Playgroud)

SQL查询:

SELECT
    Name,
    SUM(CASE WHEN Type = 'Cash'   THEN Amount ELSE 0 END) Cash,
    SUM(CASE WHEN Type = 'Card'   THEN Amount ELSE 0 END) Card,
    SUM(CASE WHEN Type = 'Cheque' THEN Amount ELSE 0 END) Cheque
FROM tblTest
GROUP BY
    Name;
Run Code Online (Sandbox Code Playgroud)

它返回我,

在此输入图像描述

上面的结果是按照我的要求,但在我的情况下,上面数据中的类型现金、卡、支票等不是预定义的,它们可能是动态出现的,那么我如何管理它,请帮助我为此构建动态列 SQL。

提前致谢..

mysql sql pivot-table aggregate-functions case-when

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

athena 中的 SQL 语法 best-n-per-group + 聚合

到目前为止,我在这方面花了几个小时,我使用的是 aws athena,但没有取得任何进展,我认为我缺少一些东西:

所以我有一张这样的桌子

------------------------------------------------------------------
caseid | postcode | streetname | state | dateandtime             
-----------------------------------------------------------------
123123 | 4000     | arthur     | QLD   | 2018-09-30 10:32:51.000 
------------------------------------------------------------------
Run Code Online (Sandbox Code Playgroud)

现在这个表将有多个重复的 caseid,我想按日期和时间获取最新的 caseid,我发现我可以执行以下操作:

SELECT b.caseid, MAX(b.dateandtime) as dateandtime
FROM  jsonmanual b
GROUP BY b.caseid
Run Code Online (Sandbox Code Playgroud)

这按我想要的方式工作。

现在,我需要使用日期和时间上的 Between 语句来过滤这些结果,并从这些我无法做到的唯一条目中获取邮政编码/街道名称/州的计数,下面是我当前的主要猜测,以显示邮政编码/街道名称/州的计数两个时间戳之间的邮政编码:

SELECT a.postcode, count(a.postcode) as countof
FROM  jsonmanual a
INNER JOIN (
    SELECT distinct b.caseid, MAX(b.dateandtime) as dateandtime, b.postcode
    FROM  jsonmanual b
    GROUP BY b.caseid, b.postcode
) b ON a.caseid = b.caseid and a.postcode = b.postcode
where …
Run Code Online (Sandbox Code Playgroud)

sql aggregate-functions greatest-n-per-group presto amazon-athena

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

如何通过聚合摆脱 Pandas 中的嵌套列名?

我有以下代码,使用 group by withEmployee_id和aggregation with来查找每个员工的总销售额和唯一销售额Customer_id

Sales.groupby('Employee_id').agg({
    'Customer_id': [
        ('total_sales', 'count'),
        ('unique_sales', 'nunique')
]})
Run Code Online (Sandbox Code Playgroud)

重要的是要知道我还将与其他列执行聚合,但到目前为止这就是我所写的全部内容。因此,如果您有建议的解决方案,我请您考虑一下,以免产生影响。

虽然这在计算每个员工的总销售额和唯一销售额以及创建两列方面正是我想要的,但它会创建嵌套列名称。因此,列名称看起来像 [('Customer_id', 'total_sales'), ('Customer_id', 'unique_sales')],这是我不想要的。有没有什么方法可以轻松摆脱嵌套部分,只包含 ['total_sales', 'unique_sales'],或者是在我完成所有操作后重命名列是最简单的方法?

谢谢!

python group-by aggregate-functions dataframe pandas

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

Postgresql - 求和时如何将 NaN 视为 0?

我有一个包含数值和 NaN 的表。求和时,如果所选值包含 NaN,则结果将为 NaN。有没有办法让postgresql在求和时将它们视为0而不是NaN?或者我只需将表中的所有 NaN 转换为 0 或 Null?

postgresql null sum nan aggregate-functions

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

#1055 - SELECT 列表的表达式#2 不在 GROUP BY 子句中,并且包含非聚合列“osunemonitor.r.entry_date”

我正在尝试按 ward_name 进行分组,这是我唯一需要分组的内容,但我收到此错误:

\ #1055 - SELECT 列表的表达式 #2 不在 GROUP BY 子句中,并且包含非聚合列“osunemonitor.r.entry_date”,该列在功能上不依赖于 GROUP BY 子句中的列;这与 sql_mode=only_full_group_by 不兼容

在我的查询中,如何使其仅分组ward_name

我的查询:

SELECT 
    pu.pu_ward_name, 
    entry_date,
    pu.o_code,
    pu.pu_ward_name,
    pu.pu_lga_name,
    pu.pu_code,
    pu.pu_ward_code,
    pu.pu_lga_code,
    pu.pu_voters_reg_count, 
    SUM(total_vote_cast) AS total_vote_cast,
    SUM(apc_total_vote) AS apc_total_vote,
    SUM(pdp_total_vote) AS pdp_total_vote,
    SUM(adp) AS adp, ward_name
FROM 
    post_election_info r 
    LEFT JOIN polling_unit pu ON r.ward_name = pu.pu_ward_name 
WHERE lga_name = 'BORIPE'
GROUP BY 
    pu.pu_ward_name
Run Code Online (Sandbox Code Playgroud)

mysql sql sum aggregate-functions left-join

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

Postgresql - 对匹配键求和 JSON 行

我的数据库中有两列,一列是 uid (myuid),另一列是代表每个用户宠物总数的键值对 (totalpetsjson)。我想查询 uid,然后对键匹配的结果 JSON 行求和。

这个查询

SELECT totalpetsjson FROM mytable WHERE "myuid" IN ('john','andy') 
Run Code Online (Sandbox Code Playgroud)

结果分为两行

{'dogs':3,'cats':5,'fish':144}
{'dogs':2,'lizards':4,'cats':3'}
Run Code Online (Sandbox Code Playgroud)

我想要的结果是什么。我如何查询并组合上面两行,如下所示?

{'dogs':5,'cats':8,'fish':144,'lizards':4}
Run Code Online (Sandbox Code Playgroud)

postgresql json aggregate-functions

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

Postgres 转换具有重复 ID 的 json

通过此选择:

json_agg(json_build_object("id", price::money))
Run Code Online (Sandbox Code Playgroud)

我得到的结果值:

[
  {"6" : "$475.00"}, 
  {"6" : "$1,900.00"},
  {"3" : "$3,110.00"},
  {"3" : "$3,110.00"}
]
Run Code Online (Sandbox Code Playgroud)

我想要这种格式的数据:

{
  "6": ["$475.00","$1,900.00"],
  "3": ["$3,110.00","$3,110.00"]
}
Run Code Online (Sandbox Code Playgroud)

当在服务器上查询或与 jsonb 一起使用时,ID 是重复的,并且只有一个键值对能够通过。

postgresql json aggregate-functions

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