标签: aggregate

选择查询 VS 查看

通常我们会定期使用 SQL Job 将事务数据聚合到一张表中。现在客户需要实时数据,所以 1 小时或 1 小时太长了。团队建议创建一个视图,其中包含从事务表本身选择数据的逻辑,而不是在几分钟内运行作业。

但我的困惑是选择查询和视图之间任何与性能相关的差异。以周期性方式将数据放入聚合表中并从该聚合中进行选择很容易,因为 1. 它不会影响主表

直接事务表中的直接选择语句会影响频繁发生的插入操作。如果我创建一个视图,我认为这个概念与 select 语句相同。现在我们也从主表中进行选择。还是我的理解有误?

请提出最佳方法以及原因

sql sql-server aggregate

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

按 R 中的列名称组聚合矩阵(或 data.frame)

我有一个大约 3000 列 x 3000 行的大矩阵。我想聚合(计算平均值)按每行的列名称分组。每列的命名与此方法类似......(并且按随机顺序)

 Tree Tree House House Tree Car Car House
Run Code Online (Sandbox Code Playgroud)

我需要数据结果(每行平均值的聚合)具有以下列:

  Tree House Car
Run Code Online (Sandbox Code Playgroud)
  • 棘手的部分(至少对我来说)是我不知道所有列名称,并且它们都是随机顺序的!

aggregate r mean

4
推荐指数
1
解决办法
4823
查看次数

如何将 WITHIN GROUP 从 Oracle 转换为 Postgres?

我正在尝试将带有复杂查询的子查询从 Oracle 转换为 Postgres。下面是子查询及其给出的错误。我知道 Postgres 中也有“WITHIN GROUP”。我错过了什么?我什Listagg至改为String_agg但得到同样的错误。

Select a, Listagg(b, ', ') WITHIN GROUP (ORDER BY b) "a"
from table;
Run Code Online (Sandbox Code Playgroud)

错误:

错误:“WITHIN”第 65 行或附近的语法错误:...a, Listagg(b, ', ') WITHIN GRO...

********** 错误 **********

错误:“WITHIN”SQL 状态处或附近的语法错误:42601 字符:5290

sql oracle postgresql aggregate

4
推荐指数
1
解决办法
2644
查看次数

如何将算术运算应用于 MySQL 中的聚合列?

TL; 博士

有没有办法在算术运算中使用聚合结果?

细节

我想取两个聚合列 ( SUM(..), COUNT(..)) 并将它们一起操作,例如:

-- doesn't work
SELECT 
    SUM(x) AS x, 
    COUNT(y) AS y, 
    (x / y) AS x_per_y -- Problem HERE
FROM
    my_tab
GROUP BY groupable_col;
Run Code Online (Sandbox Code Playgroud)

这不起作用,但我发现这样做:

SELECT 
    SUM(x) AS x, 
    COUNT(y) AS y, 
    SUM(x) / COUNT(y) AS x_per_y -- notice the repeated aggregate
FROM
    my_tab
GROUP BY groupable_col;
Run Code Online (Sandbox Code Playgroud)

但是如果我需要对聚合进行操作的许多列,它很快就会变得非常重复,而且我不确定如何判断 MySQL 是否可以优化,以便我不会多次计算聚合。

我已经搜索了一段时间,并询问了一些专业人士,我能想到的最佳选择是嵌套选择,~~我的数据库不支持。~~

编辑:确实支持他们,我一直在做错事,并过早地排除了嵌套选择

此外,MySQL 文档似乎支持它,但我无法让这样的东西工作(链接最底部的示例)

https://dev.mysql.com/doc/refman/5.5/en/group-by-handling.html

mysql sql group-by aggregate

4
推荐指数
1
解决办法
1250
查看次数

路径层次标记上的聚合

在过去的几天里,我读了很多书,但找不到适合我的解决方案。还看到了一些string正在使用该类型的东西,这在我使用的 ES 版本中已被弃用。

我在 Elasticsearch 上:5.6.4

我已经索引了一些文档,并尝试了映射并尝试使用analyzers( path_hierarchy tokenizer),查看一下,Ingest Node但似乎没有什么适合我。它与 category_tags 字段有关(请参见底部的示例)。我确实有可能按照我的喜好重组它,如果有必要,我会生成这些数据。

我想要一个典型的电子商务导航,所以我认为这应该通过 category_tags 上的聚合来实现?我创建了一个数组来显示一个文档可以有多个类别,其中每个层次结构可以是任意深的。我不认为它会比 4 或 5 级更深,但可能会发生。

我的动态模板如下所示:

      ...
    "analyzer": {
      "my_path_hierarchy_analyzer": {
        "type": "custom",
        "tokenizer": "my_path_hierarchy_tokenizer"
      },
      "my_pipe_analyzer": {
        "type": "custom",
        "tokenizer": "my_pipe_tokenizer"
      }
    },
    "tokenizer": {
      "my_path_hierarchy_tokenizer": {
        "type": "path_hierarchy",
        "delimiter": "|"
      },
      "my_pipe_tokenizer": {
        "type": "pattern",
        "pattern": "|"
      }
    }
  }
},
"mappings": {
  "item": {
    "dynamic_templates": [
      {
        "category_tags_analyzed": {
          "match": "category_tags",
          "mapping": {
            "type": "text", …
Run Code Online (Sandbox Code Playgroud)

navigation aggregate e-commerce elasticsearch

4
推荐指数
1
解决办法
1590
查看次数

处理跨聚合关系中的事件和聚合状态

我最近开始了我的第一次尝试,使用领域驱动设计原则结合事件溯源和 CQRS 来开发票务 Web 应用程序。

由于这是我第一次尝试脱离传统的 CRUD 方法,进入 DDD 世界,我确信我有很多东西设计错误,因为 DDD 需要付出很多努力来提出正确的域分离、有界上下文等。

在我的设计中,我有接受命令的命令处理程序,启动一个工作(一个工作单元),它们从聚合存储库(通过重放事件从事件存储加载聚合)加载所需的聚合,并操纵聚合通过每个聚合的公开操作,然后关闭作业。

聚合公开了实际发出事件的动作。例如,company.Create(firmName, address, taxid, ...) 发出一个CompanyCreated事件,并将其应用于自身。当 Job 即将完成时,来自该 Job 上下文中加载的所有聚合的所有事件都被事件存储收集并持久化。

现在,我遇到了一种情况,我确信这种情况很常见,在那里我有聚合之间的关系。例如 a Customerhas Contacts,或者 aSupportAgent是a的成员Department。这些是我设计中的聚合。

让我们Department举个例子。ADepartment的状态由标题、描述、一些其他属性以及作为SupportAgent该部门成员的代理的id列表组成。ASupportAgent的状态由姓名、姓氏、电话号码、电子邮件等组成,以及Department该代理所属部门的ID列表。

现在,当AddAgentToDepartment(agentId, departmentId)处理类型为Command 时,会发出两个事件。一个DepartmentAdded是发出将增加部门ID为座席的状态相应的代理,并且SupportAgentAdded发出了相应的部门,将增加代理ID进入部门的状态。

我的第一个问题是:将相关聚合的 id 保持在聚合状态是否正确?“正确”是指这是最佳实践吗?或者还有另一种方式(例如,在一种“部门成员管理器”实体/聚合或其他东西中保持关系。实际上这个实体或任何东西在这里是一种单例。在 DDD 世界中是否有这样的东西)?

我的另一个想法是关于事件重播。在前面的示例中,发出了两个事件,但为了更新视图,只需要处理其中一个,因为这两个事件描述了系统状态中完全相同的转换(代理和部门链接)。我选择只处理SupportAgentAdded事件来更新视图。我的事件处理程序执行一个 SQL 脚本来更新相应的数据库表以反映系统的当前状态。

如果我们需要重放某些事件以仅使某个聚合的视图处于一致状态,会发生什么?具体来说,当我想为支持代理重播事件时,只会重播事件DepartmentAdded,并且这些事件不会被任何人处理,因此不会更新视图。为了使整个系统进入一致状态,部分重放某些事件还是应该重放事件存储中的所有事件是否正确

如果你是 DDD 和 ES 专家,或者至少你有经验,我想得到一些提示,你可能会看到我在做什么或思考什么,错了,我应该看什么方向。

domain-driven-design aggregate aggregateroot cqrs event-sourcing

4
推荐指数
1
解决办法
1709
查看次数

DDD - 聚合 - 真的应该避免使用吸气剂吗?

早上好,

我已经读过很多次了,在 AR 中应该避免使用 setter 和 getter。虽然我可以理解使用 setter 的原因,但当它们显然是业务的一部分时,我对 getter 有点不同意。

让我们想象以下用户AR:

namespace vendor\Domain\Model;

class User
{
    private $userId;
    private $username;
    private $password;
    private $email;

    static public register(...): User { ... } // Ubiquitous Language
    public function unregister(...) { ... } // Ubiquitous Language
    public function changePassword(...) { ... } // Ubiquitous Language
    public function changeEmail(...) { ... } // Ubiquitous Language
    public function getAggregateId(): UserId { ... } // A getter
    public function getUsername(): UserName { ... …
Run Code Online (Sandbox Code Playgroud)

php getter domain-driven-design aggregate ddd-repositories

4
推荐指数
1
解决办法
624
查看次数

Pandas groupby agg - 如何获得计数?

我正在尝试获取度量的总和、平均值和计数

df.groupby(['id', 'pushid']).agg({"sess_length": [ np.sum, np.mean, np.count]})
Run Code Online (Sandbox Code Playgroud)

但是我得到“模块'numpy'没有属性'count'”,并且我尝试了不同的方式来表达计数功能,但无法让它工作。我如何将汇总记录数与其他指标一起汇总?

python group-by aggregate pandas

4
推荐指数
1
解决办法
4800
查看次数

如何按R中两列中的名称聚合?

我得到了一个数据帧:

a <- c('A','A','B','B','A')
b <- c(1,1,1,1,2)
c <- c(NA,60,NA,100,NA)
d <- c(10,NA,10,NA,100)

frame <- data.frame(a,b,c,d)

> frame
  a  b   c  d
1 A  1  NA  10
2 A  1  60  NA
3 B  1  NA  10
4 B  1 100  NA
5 A  2  NA  100
Run Code Online (Sandbox Code Playgroud)

我想通过 a 和 b 聚合它

>frame2
  a  b   c  d
1 A  1  60  10
3 B  1 100  10
5 A  2  NA  100
Run Code Online (Sandbox Code Playgroud)

我尝试了几种方法,例如来自 dplyr 的 agregat() 和 group,但不知何故它永远不起作用。我猜NA是一个问题。

merge aggregate r na

4
推荐指数
1
解决办法
120
查看次数

Pandas:DataFrameGroupby 的聚合

我正在使用这个数据集census.csv

代码:

df = pd.read_csv('Data/census.csv')
df = df[df['SUMLEV']==50]

print(df.head())
Run Code Online (Sandbox Code Playgroud)

这是我的数据的样子:

   SUMLEV  REGION  DIVISION  ...  RNETMIG2013  RNETMIG2014 RNETMIG2015
1      50       3         6  ...    -2.722002     2.592270   -2.187333
2      50       3         6  ...    22.727626    20.317142   18.293499
3      50       3         6  ...    -7.167664    -3.978583  -10.543299
4      50       3         6  ...    -5.403729     0.754533    1.107861
5      50       3         6  ...    -1.402476    -1.577232   -0.884411
Run Code Online (Sandbox Code Playgroud)

我想在按“STNAME”分组后对两列进行汇总:

(df.set_index('STNAME').groupby(level=0)['POPESTIMATE2010','POPESTIMATE2011'].agg(Avg= np.average, Sum = np.sum))
Run Code Online (Sandbox Code Playgroud)

错误:

----> 3 (df.set_index('STNAME').groupby(level=0)['POPESTIMATE2010','POPESTIMATE2011'].agg(Avg= np.average, Sum = np.sum))

f:\software_installations\anaconda3\lib\site-packages\pandas\core\groupby\generic.py in aggregate(self, func, *args, **kwargs)
    922         elif …
Run Code Online (Sandbox Code Playgroud)

python group-by aggregate pandas pandas-groupby

4
推荐指数
1
解决办法
1379
查看次数