我想显示所有客户及其地址以及订单数量和总金额。我的查询如下所示:
select *, sum(o.tota), count(o.total)
from customer c
natural join orders o
group by c.custId;
Run Code Online (Sandbox Code Playgroud)
效果很好。
但如果我向查询添加一个新表:
select *, sum(o.tota), count(o.total)
from customer c
natural join orders o
natural join cust_addresses a
group by c.custId;
Run Code Online (Sandbox Code Playgroud)
那么它就不再起作用了。聚合函数返回错误的值,因为每个客户可能有多个地址,这是正确的,我也想显示他们的所有地址。我该如何解决聚合函数问题?
我可以考虑做类似的事情:
select *, (select total from orders o where o.custid=c.custid), ..
from customer c
natural join orders o
natural join cust_addresses a
group by c.custId;
Run Code Online (Sandbox Code Playgroud)
但这非常慢。
编辑 我现在尝试了以下操作,但它告诉我字段 c.custid 未知:
select *
from
customer c,
left join (select sum(o.tota), count(o.total) from orders o where …Run Code Online (Sandbox Code Playgroud) 我正在对整数列进行 sum() 操作,并且希望将结果类型转换为 bigint - 以避免错误。然而,当我尝试使用 sum(myvalue)::bigint 时,它仍然给我一个超出范围的错误。
我可以对查询做些什么来让它工作吗?或者我必须将列类型更改为 bigint 吗?
我有一张包含以下列的表:ClientID、OrderID、ProductID、Quantity,每个 ProductID 在每个 OrderID 中仅出现一次,并且每个 OrderID 仅对应一个 ClientID。
样本数据:
ClientID OrderID ProductID Quantity
1 100 25 10
1 100 30 20
1 101 27 10
1 101 30 10
1 102 27 30
2 103 27 10
2 104 15 10
Run Code Online (Sandbox Code Playgroud)
我需要执行以下操作:在按 ClientID 和 ProductID 分组时,我需要对其他列应用聚合函数,以便结果集包含每个 ClientID 的最低 OrderID 以及每个 ClientID 的每个 ProductID 的数量列的总和。结果集的行数等于每个 ClientID 的不同 ProductID 的数量,并且每行的 OrderID = 每个 ClientID 的最低 OrderID,无论 ProductID 是多少。
期望的结果:
ClientID OrderID ProductID Quantity
1 100 25 10
1 100 30 30
1 …Run Code Online (Sandbox Code Playgroud) 我有以下聚合interval=week和min_doc_count=0
{
"aggs": {
"scores_by_date": {
"date_histogram": {
"field": "date",
"format": "yyyy-MM-dd",
"interval": "week",
"min_doc_count": 0
}
}
}
Run Code Online (Sandbox Code Playgroud)
和日期过滤器从Jan-01-2015到Feb-23-2015
{
"range": {
"document.date": {
"from": "2015-01-01",
"to": "2015-02-23"
}
}
}
Run Code Online (Sandbox Code Playgroud)
我预计 Elasticsearch 可以填充七周,即使是空的并返回存储桶,但最终只包含一项
{
"aggregations": {
"scores_by_date": {
"buckets": [
{
"key_as_string": "2015-01-05",
"key": 1420416000000,
"doc_count": 5
}
]
}
}
}
Run Code Online (Sandbox Code Playgroud)
Elasticsearch version: 1.4.0
我的聚合有什么问题,或者我怎么能说 Elasticsearch 来填补缺失的几周?
我有一个包含 3 列的 pandas 表:parent_male、parent_female、offsprings - 所有字符串。我想创建一个简单的稀疏交叉表,将男性与女性以及后代作为值 - 我如何编写一个 aggfunc 来执行此操作。(不需要真正的聚合) - 只需在空格中放置一个空字符串。
我确实有 53 个数据框(purchase01 到purchase53)的列表,按日期排序,有 18 个变量和不同的行数(已尝试,但无法在下面粘贴示例)。我想通过“V9”的重复值(因子)和“V2”列的重复值(数字)来聚合每个不同的数据帧。我还没找到答案。
对于我只能使用的一个数据框
aggregate.data.frame(purchase00$V12, by = list(purchase00($V9),FUN = sum),它工作得很好。
我尝试了llply,
llply(.data = purchase, .fun = aggregate.data.frame, by= list(unique((V9),sum, .inform = TRUE)
但如果没有成功,该函数似乎没有收到每个数据帧的 by 或函数 sum。另外,mapply 对我来说效果不佳。
有人可以帮助我了解regr_slope在数据集中有行的情况下返回 NULL的情况吗?例如:
log=> select * from sb1 order by id, ts;
id | elapsed | ts
------+---------+----------------
317e | 86 | 1552861322.627
317e | 58 | 1552861324.747
317e | 52 | 1552861325.722
317e | 58 | 1552861326.647
317e | 82 | 1552861327.609
317e | 118 | 1552861328.514
317e | 58 | 1552861329.336
317e | 58 | 1552861330.317
317e | 54 | 1552861330.935
3441 | 68 | 1552861324.765
3441 | 84 | 1552861326.665
3441 | 56 | 1552861327.627
3441 …Run Code Online (Sandbox Code Playgroud) postgresql rounding aggregate-functions linear-regression sql-null
我想对 spark Dataframe (Spark 2.1) 中的一列应用求和,我有两种方法可以做到这一点:
1- 使用窗口功能:
val windowing = Window.partitionBy("id")
dataframe
.withColumn("sum", sum(col("column_1")) over windowing)
Run Code Online (Sandbox Code Playgroud)
2- 使用 agg 功能:
dataframe
.groupBy("id")
.agg(sum(col("column_1")).alias("sum"))
Run Code Online (Sandbox Code Playgroud)
就表演而言,最好的方法是什么?这两种方法有什么区别?
我试图从表列中获取最低日期和最高日期。为此,我正在使用以下 SQL 查询。
select MIN(trunc(TO_DATE(MOD_BEGIN, 'YYYYMMDDHH24MISS'))) AS MIN_DATUM
, MAX(trunc(TO_DATE(MOD_END, 'YYYYMMDDHH24MISS'))) AS MAX_DATUM
from V_IPSL_PPE_MUC_AZEIT;
Run Code Online (Sandbox Code Playgroud)
仅供参考 - 在 PL/SQL 中使用此查询。从上面查询的输出中,我将生成日期范围。我们正在使用oracle 19c。
但问题是这些列MOD_BEGIN,MOD_END只有很少的无效值(例如:000000.01亿),由于这个当我执行上面的查询,收到错误消息说:
ORA-01843:无效月份
ORA-02063:来自 L_IPSL_PPE_MUC 的前一行
我们不允许清除这些无效数据。
如何处理这种情况?
桌子看起来像
column1 column2 column3
400196 2021-07-06 33
400196 2021-07-06 33
400196 2021-08-16 33
Run Code Online (Sandbox Code Playgroud)
我想根据第 1 列的分组获得第 3 列值的总和,但不应添加重复的日期值
所需的输出是:
column1 column3
400196 66
Run Code Online (Sandbox Code Playgroud)
我写的查询是
select sum(column3)
from table_name
group by column1
Run Code Online (Sandbox Code Playgroud)
但这给了我结果 99