标签: aggregate-functions

PostgreSQL:连接中的 json_agg 结果为嵌套数组

对于我的问题,我使用json_aggin join 来聚合我的结果。但这会导致嵌套数组序列。

询问:

 SELECT c.*,
       json_agg(ci.national_id) AS national_id,
       json_agg(a.address) AS address
FROM company AS c
LEFT JOIN
  (SELECT company_id,
          json_agg(json_build_object('value', national_id, 'country', country_code)) AS national_id
   FROM company_identification
   GROUP BY company_id) AS ci ON ci.company_id = c.id
LEFT JOIN
  (SELECT company_id,
          json_agg(address.*) AS address
   FROM address
   GROUP BY company_id) AS a ON a.company_id = c.id
GROUP BY c.id  
Run Code Online (Sandbox Code Playgroud)

结果:

 [
  {
    "id": "c876967d-dd8b-4068-88f4-57a438a2015c",
    "name": "S.A.1",
    "nationalId": [
      [
        {
          "value": "string",
          "country": "CL"
        }
      ]
    ],
    "address": [ …
Run Code Online (Sandbox Code Playgroud)

sql postgresql join aggregate-functions

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

当列值相同时,如何组合 postgres 中的行,并根据组合行对另一列求和?

给定一个像这样的表结构:

id | name | amount | other1 | other2 | other3
Run Code Online (Sandbox Code Playgroud)

和示例数据,例如:

1 | a | 40 | unrelevant data | ...
2 | a | 80 | unrelevant data | ...
3 | b | 30 | unrelevant data | ...
4 | b | 50 | unrelevant data | ...
5 | c | 20 | unrelevant data | ...
6 | c | 30 | unrelevant data | ...
Run Code Online (Sandbox Code Playgroud)

我希望我的选择结果压缩行并对压缩的金额进行求和,就像这样,我不关心丢失的数据(表示不相关数据的行):

1 | a | 120 | …
Run Code Online (Sandbox Code Playgroud)

sql postgresql group-by sum aggregate-functions

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

SQL查询按时间顺序分组

我正在研究一个业务案例,其中人们在不同时间访问不同地点。

我需要将每个系列分组在同一位置并将其作为一行返回。

为了说明这一点,我创建并填充了表访问(见下文)。

select loc, hour from visit order by hour给我

Loc Hour
1   10
1   11
1   12
2   13
2   14
1   15
1   16
Run Code Online (Sandbox Code Playgroud)

我想要一个返回以下内容的 SQL:

Loc first last
1 10 12
2 13 14
1 15 16
Run Code Online (Sandbox Code Playgroud)

有建议吗?


示例中的表格/数据

create table visit ( loc number(2), hour number(2) );

insert into visit (loc, hour) values (1,10);
insert into visit (loc, hour) values (1,11);
insert into visit (loc, hour) values (1,12);
insert into visit (loc, …
Run Code Online (Sandbox Code Playgroud)

sql database aggregate-functions window-functions gaps-and-islands

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

Pyspark - 如何获取单个数据框中数值列的基本统计数据(平均值、最小值、最大值)以及分位数(25%、50%)

我有一个火花df

spark_df = spark.createDataFrame(
    [(1, 7, 'foo'), 
     (2, 6, 'bar'),
     (3, 4, 'foo'),
     (4, 8, 'bar'),
     (5, 1, 'bar')
    ],
    ['v1', 'v2', 'id'] 
)
Run Code Online (Sandbox Code Playgroud)

预期输出

    id  avg(v1)   avg(v2)   min(v1) min(v2) 0.25(v1)     0.25(v2)    0.5(v1)     0.5(v2)
0   bar 3.666667    5.0     2        1       some-value  some-value  some-value  some-value
1   foo 2.000000    5.5     1        4.      some-value  some-value  some-value  some-value

Run Code Online (Sandbox Code Playgroud)

到目前为止,我已经可以实现平均值、最小值、最大值等基本统计数据。但无法获得分位数。我知道,这可以在 Pandas 中轻松实现,但无法在 Pyspark 中完成

另外,我知道 approxQuantile,但我无法将基本统计数据与 pyspark 中的分位数结合起来

到目前为止,我可以使用 agg 获得平均值和最小值等基本统计数据。我也想要相同 df 中的分位数

func = [F.mean, F.min,]
NUMERICAL_FEATURE_LIST = ['v1', 'v2']
GROUP_BY_FIELDS = ['id']
exp …
Run Code Online (Sandbox Code Playgroud)

aggregate-functions apache-spark pyspark

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

连续 ID 块上的 PostgresQL 窗口函数

我有一个包含部分连续整数 id 的表,即有诸如1,2,3, 6,7,8, 10, 23,24,25,26.

  • 间隙大小是动态的
  • 块的长度是动态的

我对一个简单的解决方案感到非常困惑,该解决方案从表中进行选择,并包含一个列,其中的值对应于相应块的第一个 id。

即像这样的东西

select id, first(id) over <what goes here?> first from table;
Run Code Online (Sandbox Code Playgroud)

结果应如下所示

| id | first |
|----|-------|
| 1  | 1     |
| 2  | 1     |
| 3  | 1     |
| 6  | 6     |
| 7  | 6     |
| 8  | 6     |
| 10 | 10    |
| 23 | 23    |
| 24 | 23    |
| 25 | 23 …
Run Code Online (Sandbox Code Playgroud)

postgresql aggregate-functions window-functions

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

如何控制 jsonb_object_agg 中字段的顺序

我正在尝试构建一个 jsonb 对象,其键按字母顺序排列。然而,它似乎jsonb_object_agg(k, v)忽略了输入的顺序,并按密钥长度对输入进行排序,然后按字母顺序排序。

例如

select jsonb_object_agg(k, v order by k) from (
    values ('b', 'b_something'), ('ab', 'ab_something')
) as t (k,v)
Run Code Online (Sandbox Code Playgroud)

给出

{
  "b": "b_something",
  "ab": "ab_something"
}
Run Code Online (Sandbox Code Playgroud)

但我需要的是

{
  "ab": "ab_something"
  "b": "b_something",
}
Run Code Online (Sandbox Code Playgroud)

有办法实现这一点吗?

上下文 我正在展平一个 json 列,其中的内容遵循统一但笨重的模式。由于这个有用的答案,我已经成功地做到了这一点,但是按键的顺序并不是我需要它们的方式。

postgresql aggregate-functions postgresql-10

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

如何仅内爆(爆炸的反向)pandas 中的非空值。使用 pandas group by 将多行合并为单行

我正在研究 Python Pandas。

我有一个 pandas 数据框,其中包含如下列:

ID 城市
1 纽约
1
1 亚特兰大
2 东京
2 京都
2
3 巴黎
3 波尔多
3
4 孟买
4
4 班加罗尔
5 伦敦
5
5 伯明翰

请注意,列中的空单元格要么是空字符串 (''),要么是 Nan 或 None。(为简单起见,我们只说它们是空字符串(''))。

我希望结果是这样的:

ID 城市
1 纽约、亚特兰大
2 东京、京都
3 巴黎、波尔多
4 孟买、班加罗尔
5 伦敦、伯明翰

简而言之,我想按 ID 分组,然后获取列表(通过删除空字符串)。

我有一个示例代码,但它实际上给了我带有空字符串的结果,我想删除空字符串。

dataFrame.groupby(['ID'], as_index=False)
                  .agg({'Cities': lambda x: x.tolist()})
Run Code Online (Sandbox Code Playgroud)

它给了我这样的结果:

ID 城市
1 纽约、亚特兰大
2 东京、京都、
3 巴黎、波尔多、
4 孟买、班加罗尔
5 伦敦、伯明翰

但我不想要空字符串...... …

python aggregate-functions dataframe pandas pandas-groupby

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

在 PySpark 中计算 groupby 之后的 sum 和 countDistinct

我有一个 PySpark 数据框,想要对几列进行分组,然后计算一些列的总和并计算另一列的不同值。由于countDistinct不是内置聚合函数,我无法使用像我在这里尝试的那样的简单表达式:

sum_cols = ['a', 'b']
count_cols = ['id']
exprs1 = {x: "sum" for x in sum_cols}
exprs2 = {x: "countDistinct" for x in count_cols}
exprs = {**exprs1, **exprs2}

df_aggregated = df.groupby('month','product').agg(exprs)
Run Code Online (Sandbox Code Playgroud)

我也尝试了这个答案中的方法,但是当我仅针对聚合列尝试时,exprs2 = [countDistinct(x) for x in count_cols]我收到了一条错误消息 。AssertionError: all exprs should be Column

如何将总和和不同计数合并到一个聚合中?我知道,我可以对sum列执行一次,然后对列执行一次countDistinct,然后加入两个数据框,但应该有一种解决方案可以一步完成此操作......

python group-by distinct aggregate-functions pyspark

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

将每组的总和除以总和

我想分别得到A组和B组的总和,然后将每组除以总和。

我尝试使用这个:

select name, sum(qt)
from ntbl
group by name 
Run Code Online (Sandbox Code Playgroud)
订单号 姓名 qt
1 A 12
2 A 20
3 33
4 45

结果应该是:

姓名 qt DV
A 32 0.29
78 0.70

mysql sql aggregate-functions mariadb

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

如何使用列值作为pandas聚合函数中的参数?

给定一个特定类型的表

A C
t r 1
t r 1
n j 2
n j 2
n j 2

我想对Aand进行分组B,并且仅采用由指定的行数C

所以期望的输出是

A C
t r 1
n j 2
n j 2

我试图通过这个功能来实现这一点,但没有运气

df.groupby(['A', 'B']).agg(lambda x: x.head(df.C))
Run Code Online (Sandbox Code Playgroud)

python aggregate-functions dataframe pandas

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