在像SO这样的网站上,我确信绝对有必要存储尽可能多的聚合数据,以避免在每个页面加载时执行所有那些复杂的查询/计算.例如,存储每个问题/答案的投票计数的运行记录,或存储每个问题的答案数,或者查看问题的次数,以便不需要经常执行这些查询.
但这样做是否违反了数据库规范化或任何其他标准/最佳实践?这样做的最佳方法是什么,例如,每个表是否都有另一个聚合数据表,如果它存储在它所代表的同一个表中,何时应该更新聚合数据?
谢谢
我怎样才能让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
请帮助我解决我在工作中遇到的问题.我正在使用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- 当然有效,但我无法得到评论. …
我有一张表,其中包括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中有这样的表.我想基于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) 背景问题:
假设我们有一个数据集,如:
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) 我取得了汇总一些数据的查询结果,其汇总键为数字。我试图按键对聚合结果进行排序。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) 使用数据框和熊猫,我试图找出每个值占"分组依据"类别的总计百分比的百分比
所以,使用提示数据库,我想看到,对于每个性别/吸烟者,总账单占女性吸烟者/所有女性和女性非吸烟者/所有女性(男性同样的事情)的比例是多少
例如,
如果完整的数据集是:
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) 我有一个从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) 我有两个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中使用循环(最好),建议一种方法来做到这一点?
aggregation ×10
group-by ×2
pandas ×2
postgresql ×2
python ×2
aggregate ×1
apache-kafka ×1
database ×1
dataframe ×1
distinct ×1
dplyr ×1
plyr ×1
r ×1
random ×1
sql ×1
sql-server ×1
time ×1
time-series ×1