一道关于统计学论文的问题

NOSQL(39)
一个关于使用 $month,$dayOfMonth 进行按月/日统计的问题
情景如下:
按月,日进行统计分组:
db.test_tbl.aggregate([
{&$match&:{&CreateTime&:{$gte:ISODate(&T00:00:00.000+0800&),$lt:ISODate(&T00:00:00.000+0800&)}
&&&&&&&&&&& {&$group&:{
&& &&& &&& &&& &&_id&:{&cmonth&:{&$month&:&$CreateTime&},&cday&:{&$dayOfMonth&:&$CreateTime&}},
&& &&& &&& &&& &qty:{$sum:1}
&&&&&&&&&&& }}
得到以下结果:
-----------------------------------------------------------------------------------------------------------------------------------------
{&&&& &_id& : {&&&&&&& &cmonth& : NumberInt(3),&&&&&&&& &cday& : NumberInt(9)&&& },&&&& &qty& : NumberInt(11)}
{&&&& &_id& : {&&&&&&& &cmonth& : NumberInt(3),&&&&&&&& &cday& : NumberInt(10)&&& },&&&& &qty& : NumberInt(14357)}
从上面可以看到,条件是 3/10 00:00:00 -3/11 00:00:00 统计的数据,但分组统计后出来了3/9号的数据。
但从下面统计:
db.test_tbl.aggregate([
{&$match&:{&CreateTime&:{$gte:ISODate(&T00:00:00.000+0800&),$lt:ISODate(&T00:00:00.000+0800&)}
&&&&&&&&&&& {&$group&:{
&& &&& &&& &&& &&_id&:null,
&& &&& &&& &&& &qty:{$sum:1}
&&&&&&&&&&& }}
得到的结果如下:(两次统计总量是对的)
-----------------------------------------------------------------------------------------------------------------------------------------
{&& &_id& : null,&&&& &qty& : NumberInt(14368)}
再做如下查询:
db.test_tbl.find({&CreateTime&:{$gte:ISODate(&T00:00:00.000+0800&),$lt:ISODate(&T08:00:00.000+0800&)}},{CreateTime:1}).sort({CreateTime:-1});
-----------------------------------------------------------------------------------------------------------------------------------------
{&&& &_id& : NumberLong(258579),&&&& &CreateTime& : ISODate(&T07:42:56.063+0800&)}
{&&&& &_id& : NumberLong(258578),&&&& &CreateTime& : ISODate(&T06:53:11.203+0800&)}
{&&&& &_id& : NumberLong(258577),&&&& &CreateTime& : ISODate(&T06:53:11.156+0800&)}
{&&&& &_id& : NumberLong(258576),&&&& &CreateTime& : ISODate(&T06:53:11.125+0800&)}
{&&&& &_id& : NumberLong(258575),&&&& &CreateTime& : ISODate(&T06:53:11.094+0800&)}
{&&&& &_id& : NumberLong(258574),&&&& &CreateTime& : ISODate(&T06:53:11.078+0800&)}
{&&&& &_id& : NumberLong(258573),&&&& &CreateTime& : ISODate(&T06:53:11.063+0800&)}
{&&&& &_id& : NumberLong(258572),&&&& &CreateTime& : ISODate(&T06:53:10.953+0800&)}
{&&&& &_id& : NumberLong(258571),&&&& &CreateTime& : ISODate(&T06:53:10.938+0800&)}
{&&&& &_id& : NumberLong(258570),&&&& &CreateTime& : ISODate(&T06:53:10.906+0800&)}
{&&&& &_id& : NumberLong(258569),&&&& &CreateTime& : ISODate(&T06:53:10.438+0800&)}
可以看出,正好是11条,函数 $dayOfMonth 是基于 0时区来处理的,把0:00 -- 8:00 时间内的数据计算到了前一天了。
所以在统计查询时,条件与函数的时区要一致。比如上面的查询条件不用时区就没问题,如下:
db.test_tbl.aggregate([
{&$match&:{&CreateTime&:{$gte:ISODate(&T00:00:00.000+0000&),$lt:ISODate(&T00:00:00.000+0000&)}
&&&&&&&&&&& {&$group&:{
&& &&& &&& &&& &&_id&:{&cmonth&:{&$month&:&$CreateTime&},&cday&:{&$dayOfMonth&:&$CreateTime&}},
&& &&& &&& &&& &qty:{$sum:1}
&&&&&&&&&&& }}
参考知识库
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:576591次
积分:7029
积分:7029
排名:第2063名
原创:185篇
转载:77篇
评论:36条
(4)(1)(2)(3)(1)(2)(2)(4)(5)(3)(4)(6)(4)(2)(13)(4)(8)(5)(6)(12)(13)(5)(2)(5)(6)(6)(6)(1)(6)(4)(5)(20)(2)(4)(1)(1)(2)(1)(9)(1)(1)(3)(1)(1)(4)(1)(2)(4)(1)(1)(1)(1)(1)(1)(6)(1)(1)(6)(7)(6)(4)(3)(2)(5)(6)(7)(4)查看: 3869|回复: 13
一个关于分段统计的问题
论坛徽章:1
& && && && && && && && && && && && && && && && && && & 姓名 收入 张三3000
钱七4200 要求分别统计,,的人数,除了使用union all方法外,还有什么其它好的方法吗
认证徽章论坛徽章:280
直接 select case when ..... ,count(1)& &from&&t&&group by case when 。。。。
论坛徽章:114
count(case when 收入&=3000 and收入&=4000 then 1 else NULL END)
论坛徽章:376
Group by trunc income/1000
求职 : 认证徽章论坛徽章:11
都是间隔1K的规律……
论坛徽章:73
〇〇 发表于
Group by trunc income/1000
你又来调皮,把人拐坑里了
求职 : 论坛徽章:9
CASE WHEN sal &= 500 THEN '1'
WHEN sal & 500 AND sal &= 1000&&THEN '2'
WHEN sal & 1000 AND sal &= 2000&&THEN '3'
WHEN sal & 2000 AND sal &= 3000 THEN '4'
ELSE NULL END salary_class, -- 别名命名
FROM& & emp
CASE WHEN sal &= 500 THEN '1'
WHEN sal & 500 AND sal &= 1000&&THEN '2'
WHEN sal & 1000 AND sal &= 2000&&THEN '3'
WHEN sal & 2000 AND sal &= 3000 THEN '4'
ELSE NULL END;
论坛徽章:4
create table a1(name varchar2(100),sal& &number(10,2));
create table a2(id&&number(3),beg&&number(10,2),end1 number(10,2))
insert into a1(name,sal)
values('张三',3000),
('李四',3500),
('何一',5000),
('程二',4500),
('刘五',5500),
('齐六',4800),
('钱七',4200);
这个insert语句在oracle里面需要修改。
select * from a1;
insert into a2
values(1,),
这个insert语句在oracle里面需要修改。
select * from a1;
select * from a2;
select a2.id,count(a1.name)
from a1,a2
where a1.sal &= a2.beg and a1.sal & a2.end1
group by a2.
按照这个自己修改下就行了。
论坛徽章:4
普通的GROUP BY 就可以实现了
论坛徽章:713
udfrog 发表于
你又来调皮,把人拐坑里了
oo 的有啥问题,他这个分界线应该不会两边都包括吧,比如4000
itpub.net All Right Reserved. 北京皓辰网域网络信息技术有限公司版权所有    
 北京市公安局海淀分局网监中心备案编号: 广播电视节目制作经营许可证:编号(京)字第1149号请教一道英文概率统计问题X is a discrete random variable. It's possible values are 2, 4, 6, 8. P(X=2)=0.25, P(X=4)=0.35, P(X=6)=0.10, P(X=8)=?请给解答过程谢谢各位大侠了!!!
黎约天罚659
那个,我不是很知道如果要用英文写过程的话要怎么表达……直接给个式子和答案吧:1-0.25-0.35-0.10=0.30 其实这题从数学上说很简单,所以如果非要说过程的话……我想可不可以这样表达X is a discrete random variable and It's possible values are 2,4,6,8.so P(X=2)+P(X=4)+P(X=6)+P(X=8)=1now we know P(X=2)=0.25,P(X=4)=0.35,P(X=6)=0.10,so P(X=8)=1-[P(X=2)+P(X=4)+P(X=6)]=1-0.25-0.35-0.10=0.30
为您推荐:
其他类似问题
扫描下载二维码关于数据统计问题。, 关于数据统计问题。 一个大表里
关于数据统计问题。 一个大表里面有100多个这样的子表格,我现在想护订篙寡蕻干戈吮恭经吧所以表格的总计那一栏求个和,一个个加实在太麻烦了。有什么快速点的办法吗?
niuniu-3 关于数据统计问题。
=s护订篙寡蕻干戈吮恭经um('*'!B10)
同时按CTRL
回车键执行假设总计在B10 如果每个表的总计位置不固定,用三维的函数需要提供样表 省略100字。。。。。。。关于统计学的一个问题,已知置信度如何估计总体平均数?
比如有10,11,9,13,12,11,8,10,7,9这几个样本,已知置信度水平95%(z=1.96),估计一下总体平均数,这种问题怎么算?用什么公式?
感觉有点问题…从你给的95% confidence interval对应的Z=1.96来说的话,这是一个在normal distribution下的数据,但是题干里没有给出variance。如果说Z=1.96这个部分去掉的话就没问题了。首先缺少mean和variance只有数据,那样的话直接计算sample mean与sample variance并用对应的t distribution 处理,算出置信区间。即对该分布mean的估值范围。
已有帐号?
无法登录?
社交帐号登录}

我要回帖

更多关于 统计学 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信