标签: aggregation

存储聚合数据是否违反数据库规范化?

在像SO这样的网站上,我确信绝对有必要存储尽可能多的聚合数据,以避免在每个页面加载时执行所有那些复杂的查询/计算.例如,存储每个问题/答案的投票计数的运行记录,或存储每个问题的答案数,或者查看问题的次数,以便不需要经常执行这些查询.

但这样做是否违反了数据库规范化或任何其他标准/最佳实践?这样做的最佳方法是什么,例如,每个表是否都有另一个聚合数据表,如果它存储在它所代表的同一个表中,何时应该更新聚合数据?

谢谢

database normalization aggregation

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

SQL Server通过聚合选择随机(或第一)值

我怎样才能让SQL Server返回第一个值(任何一个,我不在乎,它只需要快速)聚合时会遇到什么?

例如,假设我有:

ID      Group
1       A
2       A
3       A
4       B
5       B
Run Code Online (Sandbox Code Playgroud)

我需要为每个组获取任何一个ID.我可以这样做:

Select 
max(id)
,group 
from Table 
group by group
Run Code Online (Sandbox Code Playgroud)

返回

ID      Group
3       A
5       B
Run Code Online (Sandbox Code Playgroud)

这样做,但是当我要求SQL Server计算最高ID时,我真的需要做的就是选择它遇到的第一个ID,这似乎很愚蠢.

谢谢

PS - 字段被编入索引,所以它可能没有什么区别?

sql-server random aggregation sql-server-2008 sql-execution-plan

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

选择整个表,但在特定列中选择唯一值

请帮助我解决我在工作中遇到的问题.我正在使用SQL Server,我知道使用游标我可以实现这一点,但我很确定在SQL中使用简单查询有一种方法,但我的大脑灯泡不想打开.让我用一个例子来解释我的问题.

我有一张这样的桌子:

postedby    |   date        |   comment |
1           |   01.01.2012  |   sth sth |
2           |   01.01.2012  |   sth sth |
3           |   01.01.2012  |   sth sth |
2           |   01.01.2012  |   sth sth |
3           |   02.01.2012  |   sth sth |
2           |   03.01.2012  |   sth sth |
2           |   05.01.2012  |   sth sth |
Run Code Online (Sandbox Code Playgroud)

我想要完成的是获取所有帖子,但每个用户一个(发布列),日期必须是最新的,当然显示评论.

我试过做:

Select distinct postedby, date, comment
Run Code Online (Sandbox Code Playgroud)

但是没有用,因为我理解每个列的不同作品,所以如果在postfrom中的两行是相同的但是注释是不同的,它会将它视为区别

我试过做:

Select postedby,date,comment group by postedby(不要理解from子句)给我错误或聚合,所以我尝试 select postedby,min(date) group by postedby- 当然有效,但我无法得到评论. …

sql group-by sql-server-2005 distinct aggregation

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

基于postgresql中的每N天进行分组

我有一张表,其中包括ID,日期,值(温度)和其他一些东西.我的表看起来像这样:

+-----+--------------+------------+
| ID  |  temperature |    Date    |
+-----+--------------+------------+
|  1  |  26.3        | 2012-02-05 |
|  2  |  27.8        | 2012-02-06 |
|  3  |  24.6        | 2012-02-07 |
|  4  |  29.6        | 2012-02-08 |
+-----+--------------+------------+
Run Code Online (Sandbox Code Playgroud)

我想每10天执行一次汇总查询,例如sum和mean.

我想知道是否有可能在psql中?

postgresql time aggregation window-functions

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

将每个N值分组

我在PostgreSQL中有这样的表.我想基于ID(主键)为每16条记录执行像mean和max这样的聚合函数.例如,我必须计算前16个记录和后16个记录的平均值,依此类推.

+-----+-------------
| ID  |  rainfall  |
+-----+----------- |
|  1  |  110.2     |
|  2  |  56.6      |
|  3  |  65.6      |
|  4  |  75.9      |
+-----+------------
Run Code Online (Sandbox Code Playgroud)

postgresql group-by aggregation

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

为什么dplyr比plyr慢于数据聚合?

背景问题:

假设我们有一个数据集,如:

ID DRIVE_NUM FLAG
 1         A PASS
 2         A FAIL
 3         A PASS
-----------------
 4         B PASS
 5         B PASS
 6         B PASS
-----------------
 7         C PASS
 8         C FAIL
 9         C FAIL
Run Code Online (Sandbox Code Playgroud)

我想通过以下规则聚合DRIVE_NUM的这个数据集:

对于特定的DRIVE_NUM组,

如果DRIVE_NUM组中有任何FAIL标志,我希望第一行带有FAIL标志.

如果组中没有FAIL标志,只需占用组中的第一行.

所以,我将得到以下集合:

  ID DRIVE_NUM FLAG
   2         A FAIL
   4         B PASS
   8         C FAIL
Run Code Online (Sandbox Code Playgroud)

更新:

似乎dplyr解决方案甚至比plyr慢.我不正确地使用任何东西吗?

#Simulate Data

X = data.frame(
  group = rep(paste0("NO",1:10000),each=2),
  flag = sample(c("F","P"),20000,replace = TRUE),
  var = rnorm(20000)
)



library(plyr)
library(dplyr)

#plyr

START = proc.time()
X2 = ddply(X,.(flag),function(df) { …
Run Code Online (Sandbox Code Playgroud)

r aggregation plyr dplyr

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

Elasticsearch-获取聚合密钥按数字排序

我取得了汇总一些数据的查询结果,其汇总键为数字。我试图按键对聚合结果进行排序。elasticsearch将键视为字符串。

由于当前结果存储区的数量非常大,因此无法在客户端进行修改。有这个想法吗?

这是我的查询。

"aggregations" : {
                "startcount" : {
                    "terms" : {
                        "script" : "round(doc['startat'].value/1000)",
                        "size" : 1000,
                        "order" : { "_term" : "asc" }
                    }
                }
             }
Run Code Online (Sandbox Code Playgroud)

和当前结果存储区。

    "buckets": [
       {
          "key": "0",
          "doc_count": 68
       },
       {
          "key": "1",
          "doc_count": 21
       },
       {
          "key": "10",
          "doc_count": 6
       },
       {
          "key": "11",
          "doc_count": 16
       },
Run Code Online (Sandbox Code Playgroud)

这是我的预期结果。

"buckets": [
   {
      "key": "0",
      "doc_count": 68
   },
   {
      "key": "1",
      "doc_count": 21
   },
   {
      "key": "2", // not '10'
      "doc_count": 6
   },
   { …
Run Code Online (Sandbox Code Playgroud)

aggregation elasticsearch

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

熊猫分组 - 分组总数不起作用的百分比值

使用数据框和熊猫,我试图找出每个值占"分组依据"类别的总计百分比的百分比

所以,使用提示数据库,我想看到,对于每个性别/吸烟者,总账单占女性吸烟者/所有女性和女性非吸烟者/所有女性(男性同样的事情)的比例是多少

例如,

如果完整的数据集是:

Sex, Smoker, Day, Time, Size, Total Bill
Female,No,Sun,Dinner,2, 20
Female,No,Mon,Dinner,2, 40
Female,No,Wed,Dinner,1, 10
Female,Yes,Wed,Dinner,1, 15
Run Code Online (Sandbox Code Playgroud)

第一行的值将是(20 + 40 + 10)/(20 + 40 + 10 + 15),因为那些是非吸烟女性的其他3个值

所以输出应该是这样的

Female No 0.823529412
Female Yes 0.176470588
Run Code Online (Sandbox Code Playgroud)

但是,我似乎遇到了一些麻烦

当我这样做时,

import pandas as pd
df=pd.read_csv("https://raw.githubusercontent.com/wesm/pydata-   book/master/ch08/tips.csv", sep=',')
df.groupby(['sex', 'smoker'])[['total_bill']].apply(lambda x: x / x.sum()).head()
Run Code Online (Sandbox Code Playgroud)

我得到以下内容:

    total_bill
0   0.017378
1   0.005386
2   0.010944
3   0.012335
4   0.025151
Run Code Online (Sandbox Code Playgroud)

它似乎忽略了组,只是为每个项目计算它

我正在寻找更像的东西

df.groupby(['sex', 'smoker'])[['total_bill']].sum()
Run Code Online (Sandbox Code Playgroud)

哪个会回归

        total_bill
sex smoker  
Female  No  977.68
        Yes 593.27
Male    No  1919.75 …
Run Code Online (Sandbox Code Playgroud)

python aggregate aggregation dataframe pandas

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

具有自定义对象数据类型的Kafka流聚合

我有一个从GenericRecord类型的主题中提取json字符串的处理器。现在我将流分成2个分支。我进入第一个分支,然后将(键,值)映射到2个字符串中,该字符串包含json的特定字段和该字段的值,并且按键分组。到目前为止,一切都很好。现在,我必须使用新的Type用户定义来聚合流,并且会收到异常。

这里的代码:

新类型:

private class Tuple {

    public int occ;
    public int sum;


    public Tuple (int occ, int sum) {
        this.occ = occ;
        this.sum = sum;
    }

    public void sum (int toAdd) {
        this.sum += toAdd;
        this.occ ++;
    }

    public int getAverage () {
        return this.sum / this.occ;
    }

    public String toString() {
        return occ + "-> " + sum + ": " + getAverage();
    }
Run Code Online (Sandbox Code Playgroud)

好流:

  StreamsBuilder builder = new StreamsBuilder();
    KStream<GenericRecord, GenericRecord> source =
          builder.stream(topic);

    KStream<GenericRecord, GenericRecord>[] branches …
Run Code Online (Sandbox Code Playgroud)

aggregation apache-kafka apache-kafka-streams

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

两个时间序列的python聚合

我有两个pandas时间序列数据帧,我想根据另一个时间序列的时间间隔将值汇总到一个时间序列.让我举例说明.第一个时间序列如下:

        date    value
0 2016-03-21       10
1 2016-03-25       10
2 2016-04-10       10
3 2016-05-05       10
Run Code Online (Sandbox Code Playgroud)

第二个是从上述系列中提取的具有10个日历日间隔的日期范围.我编写了代码以从上面的数据中提取.

     date
 0   2016-03-21
 1   2016-03-31
 2   2016-04-10
 3   2016-04-20
 4   2016-04-30
Run Code Online (Sandbox Code Playgroud)

我想写一些代码来获得这个结果数据帧:

     date        value
 0   2016-03-21  20
 1   2016-03-31   0
 2   2016-04-10  10
 3   2016-04-20   0
 4   2016-04-30  10
Run Code Online (Sandbox Code Playgroud)

请不要在python中使用循环(最好),建议一种方法来做到这一点?

python time-series aggregation pandas

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