标签: aggregate

SQL - 计算WHERE AGGREGATE> 1

想象一下,我有一个包含{id,username,firstname,lastname}的客户的数据库表

如果我想找到有多少个不同名字的实例我可以做:

select firstname, count(*) from Customers group by 2 order by 1;

   firstname | count(*)
   ====================
   bob       |   1
   jeff      |   2
   adam      |   5
Run Code Online (Sandbox Code Playgroud)

如何计算多次出现的名字数量?在伪sql中它将是这样的:

select
    COUNT(
        firstname,
        count(*) as num_occurrences
    )
from 
    Customers 
group by 2 
having num_occurrences > 1;
Run Code Online (Sandbox Code Playgroud)

sql informix aggregate

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

SQL Server 2005/2008 Group By 语句带参数而不使用动态 SQL?

有没有办法编写强类型的 SQL Server 存储过程(即返回列的已知结果集)并使其组语句是动态的。

就像是:

SELECT SUM( Column0 ) FROM Table1
GROUP BY @MyVar
Run Code Online (Sandbox Code Playgroud)

我也尝试了以下方法:

SELECT SUM( Column0 ) FROM Table1
GROUP BY CASE @MyVar WHEN 'Column1' THEN Column1 ELSE Column2
Run Code Online (Sandbox Code Playgroud)

第二条语句仅适用于 Column1 和 Column2 的数据库类型相同的场景。如果它们不是 SQL 引擎,则会抛出类似于以下内容的错误:“将 nvarchar 值 'SYSTEM' 转换为数据类型 [The Different TYPE] 时,转换失败。”

我能做些什么来获得强大的结果集,同时又拥有一些动态的部分——即我的情况下的石斑鱼?这将暴露给 LINQ。

编辑:

看起来你可以做到,但你不应该!绝对矫枉过正。测试显示执行计划慢了一千倍。并且它只会随着更大的结果集而变慢。

sql aggregate sql-server-2005 sql-server-2008

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

按变量中的共享值聚合行

我有一个有点愚蠢的问题.如果我有一个矩阵(或数据框,哪个更容易使用),如:

Year  Match
2008   1808
2008 137088
2008      1
2008  56846
2007   2704
2007 169876
2007  75750
2006   2639
2006 193990
2006      2
Run Code Online (Sandbox Code Playgroud)

而且我想总结这些年来的每一场比赛(所以,例如,2008年的比赛是这样的,2008 195743我将如何做到这一点?我脑子里有一些解决方案,但它们都是不必要的复杂和R趋势有一些更简单的解决方案隐藏在某个地方.

您可以使用以下内容生成相同的矩阵:

structure(c(2008L, 2008L, 2008L, 2008L, 2007L, 2007L, 2007L, 
2006L, 2006L, 2006L, 1808L, 137088L, 1L, 56846L, 2704L, 169876L, 
75750L, 2639L, 193990L, 2L), .Dim = c(10L, 2L), .Dimnames = list(
NULL, c("Year", "Match")))
Run Code Online (Sandbox Code Playgroud)

谢谢你尽你所能的帮助.

aggregate r plyr

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

如何用data.table替换聚合?

我有以下数据:

> dput(bla)
structure(list(V1 = structure(c(4L, 4L, 4L, 2L), .Label = c("DDDD", 
"EEEE", "NNNN", "PPPP", "ZZZZ"), class = "factor"), V2 = c(100014096L, 
100014098L, 100014099L, 100014995L), V3 = c(0.742, 0.779, 0.744, 
0.42), V4 = c(1.077, 1.054, 1.049, 0.984), V5 = c(0.662, 0.663, 
0.671, 0.487), V6 = c(1.107, 1.14, 1.11, 0.849), V7 = c(0.456, 
0.459, 0.459, 1.278)), .Names = c("V1", "V2", "V3", "V4", "V5", 
"V6", "V7"), class = "data.frame", row.names = c(NA, 4L))

> bla
    V1        V2    V3    V4    V5    V6    V7 …
Run Code Online (Sandbox Code Playgroud)

aggregate r data.table

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

猫鼬:流式传输聚合的JSON数据

如标题所示,我正在使用Express我的webapp。

目前,我的代码如下所示:

API控制器

var mongoose = require('mongoose');
var Doc = mongoose.model('Document');

var sendJSONresponse = function(res, status, content) {
  res.status(status);
  res.json(content);
};

// "/api/documents"
module.exports.listAllDocuments = function(req, res) {

  var stream = Doc.find().stream();
  stream.on('data', function (chunk) {
    res.write(JSON.stringify(chunk));
  }).on('error', function (err) {
    console.log('Error: ' + err);
  }).on('end', function () {
    res.end();
  });

};
Run Code Online (Sandbox Code Playgroud)

var stream = Doc.find().stream();我希望利用而不是使用aggregate()

像一样find()aggregate()应该是可读流,对吗?

但是,当我简单地find()用一个aggregate()电话代替时,它似乎不起作用。

它说类型错误:Object #<Aggregate> has no method 'stream'。有什么方法可以流式传输聚合的JSON数据 …

streaming aggregate mongoose

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

C#Linq在多个列上联接2个表,并使用GROUP BY进行计数

我需要在五个列上加入两个实体,并且需要在SELECT中的每一列上加上GROUP BY,并在每个GROUP BY上获得一个COUNT。尽管这对SQL来说对我来说是小菜一碟,但我却对我为LINQ找到的每个示例都感到困惑。

我发现了以下两个问题(在多个列[重复]上的C#Linq分组依据在多个列上分组),但我仍然对如何执行此操作感到困惑。这是我的SQL语句:

SELECT  o.org_hq_name,
        o.org_command_name,
        o.org_region_name,
        o.org_installation_name,
        o.org_site_name,
        o.org_subsite_name,
        o.org_hq_id,
        o.org_command_id,
        o.org_region_id,
        o.org_installation_id,
        o.org_site_id,
        count(org_site_id) AS count

FROM    organization o, asset a

WHERE      o.org_hq_id = hq_org_id
AND        o.org_command_id = a.command_org_id
AND        o.org_region_id = a.region_org_id
AND        o.org_installation_id = a.installation_org_id
AND        o.org_site_id = a.site_org_id

GROUP BY o.org_hq_name,
        o.org_command_name,
        o.org_region_name,
        o.org_installation_name,
        o.org_site_name,
        o.org_subsite_name,
        o.org_hq_id,
        o.org_command_id,
        o.org_region_id,
        o.org_installation_id,
        o.org_site_id
Run Code Online (Sandbox Code Playgroud)

我在下面有一个加入:

var join1 =  from m in context.asset
             join o in context.organization
             on new {hqID = a.hq_org_id, commandID = …
Run Code Online (Sandbox Code Playgroud)

linq join group-by aggregate count

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

透视使用多列

我有一个包含5列的数据集:

store_id    year    event    item    units
123         2015     sale_2   abc      2
234         2015     sale_3   def      1
345         2015     sale_2   xyz      5
Run Code Online (Sandbox Code Playgroud)

我想转出itemsstore_id, year, and event获得sum.例如

store_id    year    event    abc     def   xyz 
123          2015    sale_2   7       0     0
234          2015    sale_2   2       1     0
Run Code Online (Sandbox Code Playgroud)

我无法找出最好的方法.通常我会在插入符号中使用dummyVars来执行此操作,但我需要总和而不是标记.我看了tapply但它不能处理超过2个分组变量.

还有其他建议吗?

aggregate r

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

Scala Spark - 计算Dataframe列中特定字符串的出现次数

如何df使用分区的Spark计算列中String的出现次数id

例如,找到a "test""name"中的值df

在SQL中将是:

 SELECT
    SUM(CASE WHEN name = 'test' THEN 1 else 0 END) over window AS cnt_test
  FROM
    mytable
 WINDOW window AS (PARTITION BY id)
Run Code Online (Sandbox Code Playgroud)

我试过用了 map( v => match { case "test" -> 1.. })

和类似的东西:

def getCount(df: DataFrame): DataFrame = {
    val dfCnt = df.agg(
          .withColumn("cnt_test", 
            count(col("name")==lit('test'))
)
Run Code Online (Sandbox Code Playgroud)

这是一项昂贵的操作吗?什么是检查特定字符串出现然后执行操作的最佳方法(sum, max, min, etc)

谢谢

scala aggregate dataframe window-functions apache-spark

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

spark:聚合器和UDAF有什么区别?

在Spark的文档中,聚合器:

抽象类Aggregator [-IN,BUF,OUT]扩展了Serializable

用户定义的聚合的基类,可以在数据集操作中使用该基类来获取组中的所有元素并将它们减少为单个值。

UserDefinedAggregateFunction为:

抽象类UserDefinedAggregateFunction扩展了Serializable

实现用户定义的聚合函数(UDAF)的基类。

根据Dataset Aggregator-Databricks的说法,“聚合器类似于UDAF,但是接口以JVM对象而不是Row的形式表示。”

看来这两个类非常相似,除了接口中的类型以外还有什么其他区别?

一个类似的问题是:UDAF与聚合器在Spark中的性能

aggregate apache-spark apache-spark-sql spark-dataframe

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

如何在Spark Dataframe上获取按结果分组的元组?

我正在尝试根据ID对实体进行分组,运行下面的代码,我有此数据框:

val pet_type_count = pet_list.groupBy("id","pets_type").count()
pet_type_count.sort("id").limit(20).show
Run Code Online (Sandbox Code Playgroud)
+----------+---------------------+-----+
|        id|            pets_type|count|
+----------+---------------------+-----+
|         0|                    0|    2|
|         1|                    0|    3|
|         1|                    3|    3|
|        10|                    0|    4|
|        10|                    1|    1|
|        13|                    0|    3|
|        16|                    1|    3|
|        17|                    1|    1|
|        18|                    1|    2|
|        18|                    0|    1|
|        19|                    1|    7|
+----------+---------------------+-----+
Run Code Online (Sandbox Code Playgroud)

我想按ID对分组的结果进行分组,现在返回每个ID的元组列表,因此我可以对每个ID应用以下udf:

val agg_udf =  udf { (v1: List[Tuple2[String, String]]) =>
    var feature_vector = Array.fill(5)(0)
    for (row <- v1) {
      val index = (5 - …
Run Code Online (Sandbox Code Playgroud)

scala aggregate user-defined-functions apache-spark-sql

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