标签: aggregation

两个联接的聚合(MySQL)

我有一个名为gallery的表.对于图库中的每一行,表格图片中有几行.一张图片属于一个图库.然后是表投票.每一行都是某个画廊的upvote或downvote.这是(简化)结构:

gallery ( gallery_id )
picture ( picture_id, picture_gallery_ref )
vote ( vote_id, vote_value, vote_gallery_ref )
Run Code Online (Sandbox Code Playgroud)

现在我想要一个查询给我以下信息:所有画廊都有自己的数据字段和连接到画廊的图片数量以及投票的sumarized值.

这是我的查询,但由于多次加入,聚合值不正确.(至少当图片或投票中有多行时.)

SELECT 
  *, SUM( vote_value ) as score, COUNT( picture_id ) AS pictures
FROM 
  gallery
LEFT JOIN 
  vote
  ON gallery_id = vote_gallery_ref
LEFT JOIN 
  picture
  ON gallery_id = picture_gallery_ref
GROUP BY gallery_id
Run Code Online (Sandbox Code Playgroud)

因为我注意到这COUNT( DISTINCT picture_id )给了我正确数量的照片我试过这个:

( SUM( vote_value ) / GREATEST( COUNT( DISTINCT picture_id ), 1 ) ) AS score
Run Code Online (Sandbox Code Playgroud)

它适用于此示例,但如果一个查询中有更多连接,该怎么办?

只是想知道是否有更好或更"优雅"的方式可以解决这个问题.另外我想知道我的解决方案是MySQL特定的还是标准的SQL?

sql join aggregation

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

聚合:死后的生命还是没有?

我一直在读关于堆栈溢出的几篇关于聚合的文章,以及它与委托和组合的比较.主要是:

区分委托,组合和聚合(java OO设计)

根据我在这里读到的这篇和其他文章,特许是聚合是一个物体拥有另一个物体,然而,一个物体的死亡并不意味着另一物体的死亡.但是,根据GoF的设计模式:

"聚合意味着聚合对象及其所有者具有相同的生命周期"[第22页底部]

有什么建议吗?

谢谢

java design-patterns aggregation

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

如何根据R中的分组获取数据帧的子集?

我有一个聚合问题,我无法弄清楚如何在R中有效地执行.

说我有以下数据:

group1 <- c("a","b","a","a","b","c","c","c","c",
            "c","a","a","a","b","b","b","b")
group2 <- c(1,2,3,4,1,3,5,6,5,4,1,2,3,4,3,2,1)
value  <- c("apple","pear","orange","apple",
            "banana","durian","lemon","lime",
            "raspberry","durian","peach","nectarine",
            "banana","lemon","guava","blackberry","grape")
df <- data.frame(group1,group2,value)
Run Code Online (Sandbox Code Playgroud)

我对采样从所述数据帧df,使得我随机的因素每个组合只挑选单个行group1group2.

如你所见,结果 table(df$group1,df$group2)

  1 2 3 4 5 6
a 2 1 2 1 0 0
b 2 2 1 1 0 0
c 0 0 1 1 2 1
Run Code Online (Sandbox Code Playgroud)

表明某些组合不止一次出现,而其他组合从未见过.对于那些被多次看到的人(例如,group1="a"group2=3),我想只随机选择一个相应的行并返回一个只包含该行子集的新数据帧.这样,分组因子的每个可能组合仅由数据帧中的单个行表示.

这里的一个重要方面是我的实际数据集可以包含从500,000行到> 2,000,000行的任何内容,因此注意性能非常重要.

我在R比较新,所以我一直在弄清楚如何正确地生成这个结构.一次尝试看起来像这样(使用plyr包):

choice <- function(x,label) {
    cbind(x[sample(1:nrow(x),1),],data.frame(state=label))
}

df <- ddply(df[,c("group1","group2","value")],
            .(group1,group2),
            pick_junc,
            label="test")
Run Code Online (Sandbox Code Playgroud)

请注意,在这种情况下,我还在名为"label"的数据框中添加了一个额外的列,该列被指定为ddply函数的额外参数.但是,我在大约20分钟后杀了这个.

在其他情况下,我尝试使用 …

r aggregation plyr dataframe

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

SQL Server:按字段上的函数分组选择

我有一个 group by YEAR(mydate),MONTH(mydate)

我想选择它们作为一个独特的领域

SELECT SUM(Price),YEAR(mydate) + '/' + MONTH(mydate)
FROM MyTable
GROUP BY YEAR(mydate), MONTH(mydate)
Run Code Online (Sandbox Code Playgroud)

或类似的东西.

mydatesmalldatetime.

可能吗?

sql sql-server datetime aggregation

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

为每个类和每个ID聚合一个变量的值

我有以下数据框:

id <- c(1,1,1,1,1,2,2,2,2)
spent <- c(10,10,20,10,10,5,5,5,20)
period <- c("f","c","c","v","v","f","c","c","v")
mean.spent <- c(10,15,15,10,10,5,5,5,20)
df <- data.frame(id,spent,period,mean.spent)
Run Code Online (Sandbox Code Playgroud)

我想要的是汇总每个时期每个Id的平均花费如下:

id  f  c  v    
1   10 15 10
2   5  5  20
Run Code Online (Sandbox Code Playgroud)

你能帮我做一下吗?

r aggregation

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

通过R中的组连接列

假设我有这个员工名单:

 Dept Date      Name            
----- --------- --------------- 
   30 07-DEC-02 Raphaely        
   30 18-MAY-03 Khoo            
   40 07-JUN-02 Mavris          
   50 01-MAY-03 Kaufling        
   50 14-JUL-03 Ladwig          
   70 07-JUN-02 Baer            
   90 13-JAN-01 De Haan
   90 17-JUN-03 King  
  100 16-AUG-02 Faviet
  100 17-AUG-02 Greenberg 
  110 07-JUN-02 Gietz           
  110 07-JUN-02 Higgins         
Run Code Online (Sandbox Code Playgroud)

我想要一个R部门的列表聚合(类似于Oracle PL/SQL的LISTAGG函数),它将产生最后一列:

 Dept Date      Name            Emp_list
----- --------- --------------- ---------------------------------------------
   30 07-DEC-02 Raphaely        Raphaely; Khoo
   30 18-MAY-03 Khoo            Raphaely; Khoo
   40 07-JUN-02 Mavris          Mavris
   50 01-MAY-03 Kaufling        Kaufling; Ladwig
   50 14-JUL-03 Ladwig …
Run Code Online (Sandbox Code Playgroud)

string oracle text r aggregation

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

R中另一个变量的平均变量

这可能是一个天真的问题,但我在一组其他变量上运行变量的回归.

但每个国家都有几个观察结果,原始回归有一个合并的样本.现在我想要每个国家的平均值并对平均值进行回归.

例如,我有50个国家,每个国家有3或4个观察.现在我想要按国家/地区平均每个变量.因此,最终每个独立/因变量有50个观测值,每个国家一个.

现在我使用的是aggregate命令,但是它创建了一个带有国家名称和平均值的变量.所以我无法对这些变量进行回归.

这就是我所拥有的

国家/某些观察/一些其他观察/一些其他观察 - 2
索马里/ 3/7 /....
USA/7/8/...
Nigeria/5/8/...
Nigeria/9/2/..
India/4/7/..
India/7/9/..
UK/8/1/..
UK/5/5/..

等等

average r aggregation

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

ElasticSearch extended_bounds min max

我使用elasticsearch aggregations返回两个不同的聚合组,一个用于当前周,一个用于前一周,我当前的周聚合看起来像这样:

"aggregations": {            
    "current": {
        "date_histogram": {
            "field": "date",
            "interval": "1d",
            "min_doc_count": 0,
            "extended_bounds": {
                "min": new Date().setDate(new Date().getDate() - 7),
                "max": new Date().getDate()
            }
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

在这一点上一切都很好,即时使用min_doc_count,extended_bounds以填补空桶的空隙,以防万一.

在我的其他聚合上,我几乎以同样的方式重复这个过程,但我希望我的桶能够用于前一个时期!

我知道这extended_bounds 不是过滤桶,因此我想在我的聚合上添加一个过滤器,如下所示:

"aggregations": {
    filtered: {
        "filter" : { 
            "bool": {
                "must": [{
                    "range" : { 
                        date: {
                            from: new Date().setDate(new Date().getDate() - 14),
                            to: new Date().setDate(new Date().getDate() - 7)
                        }
                    }
                }]
            }
        },
    },
    "previous": {
        "date_histogram": {
            "field": "date", …
Run Code Online (Sandbox Code Playgroud)

aggregation elasticsearch

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

BigQuery中交叉连接后的行聚合

假设您在BigQuery中有以下表格:

A = user1 | 0 0 |
    user2 | 0 3 |
    user3 | 4 0 |
Run Code Online (Sandbox Code Playgroud)

交叉加入后,你有

dist = |user1  user2  0 0 , 0 3 |  #comma is just showing user val seperation
       |user1  user3  0 0 , 4 0 |
       |user2  user3  0 3 , 4 0 |
Run Code Online (Sandbox Code Playgroud)

如何在BigQuery中执行行聚合以计算跨行的成对聚合.作为典型用例,您可以计算两个用户之间的欧氏距离.我想在两个用户之间计算以下指标:

sum(min(user1_row[i], user2_row[i]) / abs(user1_row[i] - user2_row[i]))
Run Code Online (Sandbox Code Playgroud)

为每对用户总结了所有i.

例如,在Python中,您只需:

for i in np.arange(row_length/2)]):
dist.append([user1, user2, np.sum(min(r1[i], r2[i]) / abs(r1[i] - r2[i]))])
Run Code Online (Sandbox Code Playgroud)

sql data-analysis cross-join aggregation google-bigquery

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

在R rstats中计算预汇总数据(具有均值和计数)的中位数

如何median对已经聚合的数据进行适当的计算?

说我有一个看起来像这样的数据框

> df <- data_frame(name = c("A","B","C","D"), count = c(1,3,5,2), avg = c(100,50,20,10))
> df
# A tibble: 4 × 3
   name count   avg
  <chr> <dbl> <dbl>
1     A     1   100
2     B     3    50
3     C     5    20
4     D     2    10
Run Code Online (Sandbox Code Playgroud)

假设我们对垃圾桶中的东西了解不多,但是假设垃圾桶中的变化很小。据我们所知,我们将像这样排列值:

10 10 20 20 20 20 20 50 50 50 100
Run Code Online (Sandbox Code Playgroud)

在11个值中,中位数将是第6个值,即20

但是,如果我简单地采用median(),则R会接受4个值:10, 20, 50, 100

> median(df$avg)
[1] 35
Run Code Online (Sandbox Code Playgroud)

这不是我想要的。

如何解决这个问题并“展开”数据集?

statistics r aggregation median

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