标签: aggregate

在没有Cursor的单个SQL表中合并数据

我有一个带有ID列的表和另一个带有数字的列.一个ID可以有多个数字.例如

ID | Number
 1 |  25
 1 |  26
 1 |  30
 1 |  24
 2 |  4
 2 |  8
 2 |  5
Run Code Online (Sandbox Code Playgroud)

现在基于这些数据,在一个新表中,我希望有这个

ID | Low | High 
1  |  24 |  26
1  |  30 |  30
2  |  4  |  5
2  |  8  |  8
Run Code Online (Sandbox Code Playgroud)

如你所见,我想合并任何数字连续的数据,如24,25,26.所以现在低点是24,高点是26,然后30仍然是一个单独的范围.我正在处理大量的数据,所以我宁愿不使用游标来提高性能(这是我以前做过的事情,而且减慢了很多事情)......实现这个目标的最佳方法是什么? ?我不是SQL专家,所以我不确定是否有可用的功能可以使这更容易,或者最快的方法是什么.

谢谢您的帮助.

sql t-sql aggregate cursor sql-server-2008

18
推荐指数
1
解决办法
1649
查看次数

将选择计数(*)值保存为整数(SQL Server)

我对这个陈述有些麻烦,毫无疑问我对这个选择陈述的回复是无知的:

declare @myInt as INT
set @myInt = (select COUNT(*) from myTable as count)

if(@myInt <> 0) 
begin
   print 'there's something in the table'
end
Run Code Online (Sandbox Code Playgroud)

myTable中有记录,但是当我运行上面的代码时,print语句永远不会运行.进一步检查表明,在上面的赋值后,myInt实际上为零.我确定我错过了一些东西,但我认为选择计数会返回一个我可以在上面使用的标量?

t-sql sql-server aggregate variable-assignment

17
推荐指数
3
解决办法
9万
查看次数

如果可能有空集,如何进行Linq聚合?

我有一个Linq集合Things,其中Thing有一个Amount(十进制)属性.

我正在尝试针对特定事物的子集对此进行聚合:

var total = myThings.Sum(t => t.Amount);
Run Code Online (Sandbox Code Playgroud)

这很好用.但后来我添加了一个条件,让我在结果中没有任何东西:

var total = myThings.Where(t => t.OtherProperty == 123).Sum(t => t.Amount);
Run Code Online (Sandbox Code Playgroud)

而不是得到total = 0或null,我得到一个错误:

System.InvalidOperationException:无法将null值分配给类型为System.Decimal的成员,该成员是非可空值类型.

这真是令人讨厌,因为我没想到这种行为.我本来期望总数为零,也许是null - 但肯定不会抛出异常!

我究竟做错了什么?什么是解决方法/修复?

编辑 - 例子

感谢大家的评论.这是一些代码,复制和粘贴(未简化).它是LinqToSql(也许这就是为什么你无法重现我的问题):

var claims = Claim.Where(cl => cl.ID < 0);
var count = claims.Count(); // count=0
var sum = claims.Sum(cl => cl.ClaimedAmount); // throws exception
Run Code Online (Sandbox Code Playgroud)

c# linq aggregate linq-to-sql

17
推荐指数
2
解决办法
6507
查看次数

将"by"对象转换为R中的数据框

我正在使用R中的"by"函数来切断数据框并将函数应用于不同的部分,如下所示:

pairwise.compare <- function(x) {
Nright <- ...
Nwrong <- ...
Ntied <- ...
return(c(Nright=Nright, Nwrong=Nwrong, Ntied=Ntied))
}
Z.by <- by(rankings, INDICES=list(rankings$Rater, rankings$Class), FUN=pairwise.compare)
Run Code Online (Sandbox Code Playgroud)

结果(Z.by)看起来像这样:

: 4 
: 357 
Nright Nwrong Ntied
     3      0     0
------------------------------------------------------------
: 8 
: 357 
NULL
------------------------------------------------------------
: 10 
: 470 
Nright Nwrong Ntied
     3      4     1 
------------------------------------------------------------ 
: 11 
: 470 
Nright Nwrong Ntied
    12      4     1
Run Code Online (Sandbox Code Playgroud)

我想要的是将此结果转换为数据框(不存在NULL条目),所以它看起来像这样:

  Rater Class Nright Nwrong Ntied
1     4   357      3      0     0
2    10   470      3      4 …
Run Code Online (Sandbox Code Playgroud)

aggregate r dataframe

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

CQRS传奇 - 我明白了吗?

我正在尝试理解传奇,同时我有一种特定的思考方式 - 但我不确定我的想法是否正确.因此,我想详细说明并让别人告诉我这是对还是错.

根据我的理解,传奇是解决长期运行流程建模问题的解决方案.长时间运行意味着:涉及多个命令,多个事件以及可能的多个聚合.该进程未在其中一个参与聚合内建模,以避免它们之间的依赖关系.

基本上,saga只不过是一个命令/事件处理程序,它对内部和外部命令/事件作出反应.它不包含其自身的逻辑,它只是一个(有限)状态机,并为此提供的任务,例如当事件发生X,发送命令ÿ.

Sagas持久存储到事件存储以及聚合,与特定的聚合实例相关联,因此在使用此特定聚合(或聚合集合)时会重新加载.

这是正确的吗?

aggregate cqrs saga

17
推荐指数
2
解决办法
7987
查看次数

使用data.table聚合所有列

我想做相同的以下内容,但使用data.table的"by":

dt <- data.table(V1=rnorm(100), V2=rnorm(100), V3=rnorm(100), ...
                 group=rbinom(100,2,.5))
dt.agg <- aggregate(dt, by=list(dt$group), FUN=mean)
Run Code Online (Sandbox Code Playgroud)

我知道我可以这样做:

dt.agg <- dt[, list(V1=mean(V1), V2=mean(V2), V3=mean(V3)), by=group]
Run Code Online (Sandbox Code Playgroud)

但对于这种情况,我正在考虑我有100个左右的列V1-V100(而且我总是希望通过单个因子聚合所有这些,如上面的汇总)所以我上面提到的data.table解决方案是'可行.

aggregate r data.table

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

SSRS表达式:textbox的值表达式具有对聚合无效的scope参数

我收到以下错误:

Error   1   [rsInvalidAggregateScope] The Value expression for the text box 
‘Textbox2’ has a scope parameter that is not valid for an aggregate function.  
The scope parameter must be set to a string constant that is equal to either 
the name of a containing group, the name of a containing data region, or 
the name of a dataset.
Run Code Online (Sandbox Code Playgroud)

我的Textbox2背后的表达式(我添加了一些空格以便于阅读):

Iif(Parameters!ReportParameterPersoneelsNr.Value.Equals(String.Empty),

       "Prestaties " + First(Fields!firmanaam.Value, "DataSetHrm") + 
        "(" + First(Fields!indienstfirmanr.Value, "DataSetHrm") + ")",

       "Prestaties " + First(Fields!naam.Value, "DataSetHrm") + " " …
Run Code Online (Sandbox Code Playgroud)

aggregate concatenation reporting-services ssrs-2008 ssrs-expression

17
推荐指数
2
解决办法
5万
查看次数

ElasticSearch仅返回具有不同值的文档

假设我有这个给定的数据

{
            "name" : "ABC",
            "favorite_cars" : [ "ferrari","toyota" ]
          }, {
            "name" : "ABC",
            "favorite_cars" : [ "ferrari","toyota" ]
          }, {
            "name" : "GEORGE",
            "favorite_cars" : [ "honda","Hyundae" ]
          }
Run Code Online (Sandbox Code Playgroud)

每当我在搜索最喜欢的汽车是丰田的人时查询这些数据,它就会返回这些数据

{

            "name" : "ABC",
            "favorite_cars" : [ "ferrari","toyota" ]
          }, {
            "name" : "ABC",
            "favorite_cars" : [ "ferrari","toyota" ]
          }
Run Code Online (Sandbox Code Playgroud)

结果是两个名称为ABC的记录.如何仅选择不同的文档?我想得到的结果只是这个

{
                "name" : "ABC",
                "favorite_cars" : [ "ferrari","toyota" ]
              }
Run Code Online (Sandbox Code Playgroud)

这是我的查询

{
    "fuzzy_like_this_field" : {
        "favorite_cars" : {
            "like_text" : "toyota",
            "max_query_terms" : 12
        }
    }
} …
Run Code Online (Sandbox Code Playgroud)

java aggregate nosql elasticsearch spring-data-elasticsearch

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

获取数据框中分类变量的最小值和最大值

我有一个如下所示的数据框:

D   X   Y   Z
A  22  16  23
A  21  16  22
A  20  17  21
B  33  50  11
B  34  53  12
B  34  55  13
C  44  34  11
C  45  33  11
C  45  33  10
D  55  35  60
D  57  34  61
E  66  36  13
E  67  38  14 
E  67  37  13
Run Code Online (Sandbox Code Playgroud)

我想获取所有列值中分类变量的最小值和最大值D,因此输出数据框应如下所示:

D Xmin Xmax Ymin Ymax Zmin Zmax
A 20    22   16   17   21   23 
B 33 …
Run Code Online (Sandbox Code Playgroud)

python aggregate pandas

17
推荐指数
4
解决办法
2867
查看次数

我可以将非聚合列与group by一起使用吗?

您不能(不应该)将非聚合放在查询SELECT行中GROUP BY.

但是,我想访问与max相关联的非聚合之一.用简单的英语,我想要一张每种类型最老的表格.

CREATE TABLE stuff (
   id int,
   kind int,
   age int
);
Run Code Online (Sandbox Code Playgroud)

这个查询给了我以后的信息:

SELECT kind, MAX(age)
FROM stuff
GROUP BY kind;
Run Code Online (Sandbox Code Playgroud)

但它不是最有用的形式.我真的希望id与每一行相关联,以便我可以在以后的查询中使用它.

我正在寻找这样的东西:

SELECT id, kind, MAX(age)
FROM stuff
GROUP BY kind;
Run Code Online (Sandbox Code Playgroud)

这输出:

SELECT stuff.*
FROM
   stuff,
   ( SELECT kind, MAX(age)
     FROM stuff
     GROUP BY kind) maxes
WHERE
   stuff.kind = maxes.kind AND
   stuff.age = maxes.age
Run Code Online (Sandbox Code Playgroud)

看起来真的应该离开以获取这些信息而无需加入.我只需要SQL引擎在计算最大值时记住其他列.

mysql sql group-by aggregate

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