mysql分类php mysql 统计数量量

在 SegmentFault,学习技能、解决问题
每个月,我们帮助 1000 万的开发者解决各种各样的技术问题。并助力他们在技术能力、职业生涯、影响力上获得提升。
问题对人有帮助,内容完整,我也想知道答案
问题没有实际价值,缺少关键内容,没有改进余地
我需要从一张警报记录表中统计一整年里每个月的不同类型的数量,表中字段主要为id, alarm_type以及alarm_time,因为alarm_time是时间戳,我不知道要如何处理来将这些时间戳分类,还有一个难点就是我想要返回的结果是alarm_type,alarm_count以及该警报类型属于的那个月一号零点的时间戳
答案对人有帮助,有参考价值
答案没帮助,是错误的答案,答非所问
分步骤说吧
把时间戳转成时间
`select from_unixtime(alarm_time) `;
按月统计的话,就要把时间转成月
date_format( from_unixtime(alarm_time),"%Y%m")`;
最后的SQL可能会是这个样子
select count(t.id) as 'alarm_count',t.type as 'alarm_type' from(
select id,alarm_type ,date_format( from_unixtime(alarm_time),"%Y%m")` as time
from tablename
) t group by t.time,t.alarm_type
我又重新审视了下题主的要求,为了查出所属月的凌晨时间戳,所以在上一步的基础上改一下SQL
select count(t.id) as 'alarm_count',t.type as 'alarm_type',unix_timestamp(str_to_date(t.time,"%Y%M")) as 'alarm_time'
select id,alarm_type ,date_format( from_unixtime(alarm_time),"%Y%m")` as time
from tablename
group by t.time,t.alarm_type
答案对人有帮助,有参考价值
答案没帮助,是错误的答案,答非所问
楼主最好把,数据贴出来,不然看不懂楼主最后一句的意思。id, alarm_type,alarm_time我看楼主字面上是要根据alarm_time按月统计出警报数量,可是后面看楼主说的“以及该警报类型属于的那个月一号零点的时间戳”这就不明白了
同步到新浪微博
分享到微博?
关闭理由:
删除理由:
忽略理由:
推广(招聘、广告、SEO 等)方面的内容
与已有问题重复(请编辑该提问指向已有相同问题)
答非所问,不符合答题要求
宜作评论而非答案
带有人身攻击、辱骂、仇恨等违反条款的内容
无法获得确切结果的问题
非开发直接相关的问题
非技术提问的讨论型问题
其他原因(请补充说明)
我要该,理由是:
在 SegmentFault,学习技能、解决问题
每个月,我们帮助 1000 万的开发者解决各种各样的技术问题。并助力他们在技术能力、职业生涯、影响力上获得提升。下次自动登录
现在的位置:
& 综合 & 正文
MYSQL里面统计一个表的列数(即字段数目)怎么查
命令行下用 show columns from [table]会得到如 xx rows in set (0.00 sec)
$sql="select * from article where 0";$result = mysql_query($sql);echo mysql_num_fields($result);
【上篇】【下篇】mysql按条件统计数量mysql按条件统计数量科技的表现形式百家号问题描述有一个信息表info,他的u_id是关联的用户的id,他的m_id是关联的电话的id,每打一次电话就新增一条记录,m_id=10表示是公司外部人员拨打。(还可能细分到m_id<=5表示部门领导)数据库的信息如下:方法1:使用GROUP BY这种GROUP BY方法的最大问题在于:无法区分所得到的结果。不知道哪个值是公司内部,哪个是公司外部因此,为了区分统计结果,修改后的sql如下:条件表达式作为字段时,该字段的值就是该条件表达式的值,因此,对应我们的例子,waibu = 1 也就是表示 m_id > 10 的值为1,因此,第二行中的数字代表公司外部人员拨打的电话数量优缺点缺点是显而易见的,由于使用了条件表达式作为分组依据,它只能做二元的划分,对于要分成多类进行统计的情况不能够胜任。比如要分别统计电话id在1~5、5~10,10~15的数量就无法实现了。另外,由于使用了GROUP BY,因此涉及到排序,执行时间上要更长。方法2:使用嵌套的SELECT使用嵌套的SELECT也可以达到目的,在每个SELECT子句中统计一个条件下的数据,然后用一个主SELECT把这些统计数据整合起来。优点就是直观,而且速度也比GROUP BY要快。虽然是3条SELECT语句,看起来比GROUP BY的方案多了2条语句,但是它不涉及到排序,这就节省了很多时间。缺点可能就是语句稍多。方法3:使用CASE WHEN这里的COUNT和CASE WHEN联合使用,做到了分类计数。先使用CASE WHEN,当满足条件时,将字段值设置为 1, 不满足条件时,将字段值设置为NULL,接着COUNT函数仅对非NULL字段进行计数。本文由百家号作者上传并发布,百家号仅提供信息发布平台。文章仅代表作者个人观点,不代表百度立场。未经作者许可,不得转载。科技的表现形式百家号最近更新:简介:智能先锋,世界作者最新文章相关文章其他回答(1)
跪求就何必呢,男儿膝下有黄金。
不知道你数据量有多大,其实很难给意见的。
我了解需求,一定要问客户数量级的,比如,一天多少张单,一张单多少商品项,共有多少不同的商品。
你问的这种查询是很基本的一个查询需求,一般都会实现的,在这上面,我没有碰到啥性能上的问题。
基本都是秒出,数据库5G,年营业额1个亿左右。
收获园豆:25
园豆:27443
园豆:27443
清除回答草稿
&&&您需要以后才能回答,未注册用户请先。温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!&&|&&
曾经,我擅长使用SG551
LOFTER精选
网易考拉推荐
用微信&&“扫一扫”
将文章分享到朋友圈。
用易信&&“扫一扫”
将文章分享到朋友圈。
字段有&id,
result0 张三
C....统计各人的不同操作结果的量--- 最初始的脚本 ---select operator, result, count(*) as number....group by operator,result完事了但是..因为 张三是没有 C这种结果的,王五也没有AB的结果,所以group出来的格式很难看想着怎样把group,count出来为0的也强制显示呢?研究count() 无解;然后开始折腾表的联立,费了很多精力... 基本功不扎实,惭愧....;终于搞清楚了各种自然联结,inner,outer join的关系和用法;然后寻思着怎样 join on 两个条件... operator和result ... 死胡同...;绕了不小的一个圈子..得出了一个可行的做法,效率是否很糟糕不知道...可阅读性很糟糕..我承认水平十分的有限,献丑了思路如下:1. 先构造一个完美格式的表,称为格式表2. 另准备一个数据表,上文第一个表已经是了3. 为格式表和数据表创造一个可以对应联立的字段4. 把两表进行外联,数据表的数据填到格式表中去5. 把一些没有填充的空格Null值进行一下修饰,补充0开始干活//构造格式表这个格式表是什么样子呢?就是名单和结果的乘方Select distinct operatorfrom Operate&group by operator//名单有了Select distinct resultfrom Operategroup by result//各种结果也有了Select O.operator,R.resultfrom& (Select distinct operator from Operate& group by operator) O, (Select distinct result from Operate group by result) R//然后呢,我想..数据表和格式表用什么相对应呢?用了一个取巧的办法,利用 CONCAT() 函数把两个字段进行组合举例说id,& operator,
result0 张三
Aconcat(operator,result) = "张三A"然后我就可以开始把两个表进行 outer join 了Select T.operator,T.result,D.result, IFNULL(D.number,0)from(Select O.operator,R.result, Concat(O.operator,R,result) as TemplateIDfrom& (Select distinct operator from Operate& group by operator) O, (Select distinct result from Operate group by result) R) Tleft outer join(select count(*) as number,Concat(operator,result) as DataIDfrom operategroup by operator,result) Don T.TemplateID = D.DataID;OK大功告成,用ifnull把输出的null值替换成0因concat()是mysql的函数,因此脚本并不适用于其它数据库不知道还有没有更简便的方法..才疏学浅,献丑了
阅读(5055)|
用微信&&“扫一扫”
将文章分享到朋友圈。
用易信&&“扫一扫”
将文章分享到朋友圈。
历史上的今天
在LOFTER的更多文章
loftPermalink:'',
id:'fks_',
blogTitle:'mysql分组统计,并显示统计为0的项',
blogAbstract:'需求明了一个表 Tab: Operate字段有&id,
result0 张三
C....统计各人的不同操作结果的量--- 最初始的脚本 ---',
blogTag:'',
blogUrl:'blog/static/',
isPublished:1,
istop:false,
modifyTime:6,
publishTime:9,
permalink:'blog/static/',
commentCount:0,
mainCommentCount:0,
recommendCount:1,
bsrk:-100,
publisherId:0,
recomBlogHome:false,
currentRecomBlog:false,
attachmentsFileIds:[],
groupInfo:{},
friendstatus:'none',
followstatus:'unFollow',
pubSucc:'',
visitorProvince:'',
visitorCity:'',
visitorNewUser:false,
postAddInfo:{},
mset:'000',
remindgoodnightblog:false,
isBlackVisitor:false,
isShowYodaoAd:true,
hostIntro:'曾经,我擅长使用SG551',
hmcon:'1',
selfRecomBlogCount:'0',
lofter_single:''
{list a as x}
{if x.moveFrom=='wap'}
{elseif x.moveFrom=='iphone'}
{elseif x.moveFrom=='android'}
{elseif x.moveFrom=='mobile'}
${a.selfIntro|escape}{if great260}${suplement}{/if}
{list a as x}
推荐过这篇日志的人:
{list a as x}
{if !!b&&b.length>0}
他们还推荐了:
{list b as y}
转载记录:
{list d as x}
{list a as x}
{list a as x}
{list a as x}
{list a as x}
{if x_index>4}{break}{/if}
${fn2(x.publishTime,'yyyy-MM-dd HH:mm:ss')}
{list a as x}
{if !!(blogDetail.preBlogPermalink)}
{if !!(blogDetail.nextBlogPermalink)}
{list a as x}
{if defined('newslist')&&newslist.length>0}
{list newslist as x}
{if x_index>7}{break}{/if}
{list a as x}
{var first_option =}
{list x.voteDetailList as voteToOption}
{if voteToOption==1}
{if first_option==false},{/if}&&“${b[voteToOption_index]}”&&
{if (x.role!="-1") },“我是${c[x.role]}”&&{/if}
&&&&&&&&${fn1(x.voteTime)}
{if x.userName==''}{/if}
网易公司版权所有&&
{list x.l as y}
{if defined('wl')}
{list wl as x}{/list}

我要回帖

更多关于 mysql 快速统计数量 的文章

 

随机推荐