linux mysql统计次数_按条件计数 - MySQL统计函数记录_数据库技术_Linux公社-Linux系统门户网站...

news/2024/5/16 8:30:30/文章来源:https://blog.csdn.net/weixin_39974409/article/details/113900716

问题描述

为使讨论简单易懂,我将问题稍作简化,去掉诸多的背景。

从前有一个皇帝,他有50个妃子,这些妃子很没有天理的给他生了100,000个儿子,于是,皇帝很苦恼,海量的儿子很难管理,而且,他想知道每个妃子给他生了多少个儿子,从而论功行赏,这很难办。于是,皇帝请了一个程序员帮他编了一个程序,用数据库来存储所有的儿子的信息,这样就可以用程序来统计和管理啦。

数据库的结构如下:

id 皇子的唯一编号

mother 皇子母亲的唯一编号

皇帝把妃子分成了两个等级,天宫娘娘(编号小于25)和地宫娘娘(编号大于等于25),他想知道天宫娘娘们和地宫娘娘们的生育能力孰强孰弱。于是,程序员开始写SQL Query了。

方法1:使用GROUP BY

SQL Query

SELECT COUNT(*) FROM `prince` GROUP BY `mother` > 24;

执行结果

count(*)

50029

49971

在100,000行数据上的运行时间:0.0335 秒

分析

这种GROUP BY方法的最大问题在于:无法区分所得到的结果。这两个数字哪一个是天宫娘娘们所生的皇子数,哪一个是地宫娘娘们所生的皇子数呢?不知道。所以,尽管它统计出了总数,但是没有什么意义。

因此,为了区分统计结果,必须要把条件 mother > 24 也作为一个字段在结果集中作为一个字段体现出来,修改后的sql如下:

SELECT COUNT(*) AS `number`, `mother` > 24 AS `type` FROM `prince` GROUP BY `mother` > 24;

执行结果

number type

50029 0

49971 1

条件表达式作为字段时,该字段的值就是该条件表达式的值,因此,对应我们的例子,type = 1 也就是表示 mother > 24 的值为1,因此,第二行中的数字代表地宫娘娘们所生的皇子数。

经过修改后,我们看出,天宫娘娘们略胜一筹。

优缺点

缺点是显而易见的,由于使用了条件表达式作为分组依据,它只能做二元的划分,对于要分成多类进行统计的情况不能够胜任。比如要分别统计1~10号、11~24号,25号~50号妃子的产子数,就无法实现了。

另外,由于使用了GROUP BY,因此涉及到排序,执行时间上要更长。

我暂时没有发现这种方法的优点。

方法2:使用嵌套的SELECT

使用嵌套的SELECT也可以达到目的,在每个SELECT子句中统计一个条件下的数据,然后用一个主SELECT把这些统计数据整合起来。

SQL Query

SELECT

( SELECT COUNT( * ) FROM `prince` WHERE `mother` >24 ) AS `digong`,

( SELECT COUNT( * ) FROM `prince` WHERE `mother` <=24 ) AS `tiangong`

执行结果

digong tiangong

49971 50029

在100,000行数据上的运行时间:0.0216 秒

分析

这种嵌套SELECT的方法非常直观,就是分别统计各个条件下的数值,最后进行汇总,通俗易懂,跟自然语言没啥区别了。

优缺点

优点就是直观,而且速度也比GROUP BY要快。虽然是3条SELECT语句,看起来比GROUP BY的方案多了2条语句,但是它不涉及到排序,这就节省了很多时间。

缺点可能就是语句稍多,对语句数量有洁癖的同学可能会比较不舒服。

方法3:使用CASE WHEN

CASE WHEN语句的功能很强大,可以定义灵活的查询条件,很适合进行分类统计。

SQL Query

SELECT

COUNT( CASE WHEN `mother` >24 THEN 1 ELSE NULL END ) AS `digong`,

COUNT( CASE WHEN `mother` <=24 THEN 1 ELSE NULL END ) AS `tiangong`

FROM prince

执行结果

digong tiangong

49971 50029

在100,000行数据上的运行时间:0.02365825 秒

分析

此方法的关键在于

COUNT( CASE WHEN `mother` >24 THEN 1 ELSE NULL END )

这里的COUNT和CASE WHEN联合使用,做到了分类计数。先使用CASE WHEN,当满足条件时,将字段值设置为 1, 不满足条件时,将字段值设置为NULL,接着COUNT函数仅对非NULL字段进行计数,于是,问题解决。

优缺点

优点嘛,此方法也不涉及到排序,因此运行时间上与方法2相当,SELECT语句减少到了 1 条。

缺点就是语句比较长,对语句长度有洁癖的同学可能会比较不舒服。

总结

对于确定分类的按条件计数,可以尽量不用GROUP BY,从而避免排序动作,加速Query的执行。

如果需要根据某个字段的值进行分类,而该字段的值是可变的,比如皇帝要统计每一个妃子的产子数,而他可能不停的再娶很多妃子,这种情况下,使用方法2和方法3就不太灵光了,还是使用一个GROUP BY来得简单便捷。0b1331709591d260c1c78e86d0c51c18.png

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.luyixian.cn/news_show_789731.aspx

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

php-gene邮箱,生信分析网站(基因组学分析)

生信论文的套路ONCOMINE从全景、亚型两个维度做表达差异分析&#xff1b;临床标本从蛋白水平确认(或HPA数据库)&#xff0c;很重要&#xff1b;Kaplan-Meier Plotter从临床意义的角度阐明其重要性&#xff1b;cBio-portal数据库做基因组学的分析(机制一)&#xff1b;STRING互作…

域名该怎样选_有了域名怎么建网站,角点科技为你详解建站流程

有了域名怎么网站呢&#xff1f;这个问题当然有两个方面的答案&#xff0c;首先是定制的网站&#xff0c;这个网站就是符合你的风格&#xff0c;有自己的特点。还有一种就是仿制网站&#xff0c;拿一些自己喜欢的网站来模仿&#xff0c;做出一个相似的网站。那么二者的建造流程…

ideaspringmvc连接mysql,使用IntelliJ IDEA开发SpringMVC网站(三)数据库配置

六、数据库配置下面&#xff0c;就要通过一个简单的例子&#xff0c;来介绍SpringMVC如何集成Spring Data JPA(由 Hibernate JPA 提供)&#xff0c;来进行强大的数据库访问&#xff0c;并通过本章节的讲解&#xff0c;更加深刻地认识Controller是如何进行请求处理的&#xff0c…

对外汉语偏误语料库_干货收藏!最全对外汉语教学资源网站

快上研究生的你会面临成为新手教师的困难&#xff01;很多新手教师在每次备课的时候&#xff0c;都要花费大量的时间和精力在找素材上。学姐们为大家准备了资源网站集锦&#xff0c;希望能够帮助各位老师更高效地备课。教学网站篇网络孔子学院网络孔子学院&#xff0c;这个网站…

mysql投票网站_PHP+Mysql实现网站顶和踩投票功能实例

PHPMysql实现网站顶和踩投票功能实例&#xff0c;通过记录用户IP&#xff0c;判断用户的投票行为是否有效&#xff0c;该实例也可以扩展到投票系统中。首先我们在页面上放置“顶”和“踩”的按钮&#xff0c;即#dig_up和#dig_down&#xff0c;按钮上分别记录了投票的票数以及所…

php支付宝异步回调验签失败,thinkphp网站支付宝异步回调验签失败问题_PHP开发框架教程...

了解Redis这个核心数据类型_PHP开发框架教程string字符串tring类型是二进制安全的&#xff0c;即string中可以包含任何数据&#xff0c;Redis 中的普通string采用rawencoding 即原始编码方式&#xff0c;该编码方式会动态扩容&#xff0c;并通过提前预分配冗余空间&#xff0c;…

java扶贫,java精准扶贫捐赠网站ssm框架

本精准扶贫网站管理系统主要包括系统用户管理模块、捐赠信息管理模块、投诉信息管理、扶贫资讯管理、登录模块、和退出模块等多个模块,系统采用了jsp的mvc框架,SSM(springMvcspringMybatis)框架进行开发,本系统使用mysql&#xff0c;独立运行,不依附于其他系统&#xff0c;可移…

重定向 header_[SEO名词]网站301重定向是什么?

301转向(或叫301重定向&#xff0c;301跳转)是当用户或搜索引擎向网站服务器发出浏览请求时&#xff0c;服务器返回的HTTP数据流中头信息(header)中的状态码的一种&#xff0c;表示本网页永久性转移到另一个地址。301重定向对网站真正的用途很大一部分是为了用户而设置的&#…

美国服务器网站怎么黑屏了,关于美国服务器IP的常见问题的详细解答!

原标题&#xff1a;关于美国服务器IP的常见问题的详细解答&#xff01;在租用服务器时&#xff0c;与之密切相关的一个要素就是IP&#xff0c;关于IP的问题总是有人问起&#xff0c;这里列举几项常见的问题&#xff0c;以供参考。一、IP收费吗&#xff1f;一般情况下&#xff0…

从前慢-SEO

SEO 1 广告 商家给相应公司钱,就有了广告,每点击一下,就会耗费商家的钱, 这里的广告也叫SEM2 百度快照 符合SEO标准&#xff0c;被百度收录&#xff0c;显示百度快照。 这里的百度快照也叫SEO3 搜索引擎概述 搜索引擎是指根据一定的策略、运用特定的计算机程序,从 互联网上搜…

Linux下如何禁止浏览器访问某些网站

cd 到/etc sudo vim hosts 修改hosts文件 在如下位置插入 127.0.0.1 Tab键 需要屏蔽的网址 保存退出,被屏蔽的网站已无法访问

基于openerp的erpcmsone:可当网站程序可当内部知识管理及ERP,及前后端合一的通用网站程序选型,设计与部署

本文关键字&#xff1a;openerp website,erp backend website,erp based portal,netdisk storage based blog,uniform www and erp system 作为一个自己不断尝试建站自用的vps和虚机重度用户&#xff0c;我需要的是一个外能当个人博客用内能当云存储使用的网站程序&#xff0c…

python在线实战_实战 - 廖雪峰的官方网站

看完了教程&#xff0c;是不是有这么一种感觉&#xff1a;看的时候觉得很简单&#xff0c;照着教程敲代码也没啥大问题。 于是准备开始独立写代码&#xff0c;就发现不知道从哪开始下手了。 这种情况是完全正常的。好比学写作文&#xff0c;学的时候觉得简单&#xff0c;写的时…

一种设想:打造小程序版本公号和自托管的公号,将你的网站/blog做到微信/微信公号里且与PC端合一

本文关键字&#xff1a;打造小程序版本公号&#xff0c;打造微网站版本公号&#xff0c;,从私有云到私流&#xff0c;微信移动生态&#xff0c;微信开发者号注册&#xff0c;将你的网站做到微信&#xff0c;微信blog微网站/小程序,将认证后端做在网盘中,&#xff0c;将你的网站…

一个netdisk storage backend app webos和增强的全功能网站云设想

本文关键字&#xff1a;利用网盘空间,network filesystem代替静态网站空间,做成静态网站的动态模块,利用v2y,nginx给onedriveonemanager做自动cdn,利用网盘代替函数计算 在前面《利用大容量网盘onedrive配合公有云做你的nas及做站》我们说到用网盘空间达成网站云和用网盘做附件…

vue seo关键词设置_SEO 技术指南

从搜索引擎出现之初&#xff0c;SEO 就一直是个避不开的话题&#xff0c;许多产品将搜索引擎看做一个潜在的获客渠道&#xff0c;希望通过”流量“为产品带来价值。搜索一下”SEO“这个关键词&#xff0c;会出现大把的推广公司&#xff0c;甚至有专门的 SEO 工程师&#xff0c;…

如何利用铁威马NAS搭建网站服务器?

利用铁威马NAS&#xff0c;你可以将TNAS架设成一个网站服务器。如需启用网站服务器功能&#xff0c;请前往 TOS 桌面 > 控制面板 > 网络服务 > 网站服务器。 1.勾选“启用网站服务器”&#xff1b; 2.设置网站服务器的端口号&#xff0c;设置网站根目录&#xff08;…

教你利用铁威马NAS轻松搭建网站服务器

在铁威马NAS中&#xff0c;你可以将TNAS架设成一个网站服务器。如需启用网站服务器功能&#xff0c;需要开启网站服务器。 1.登录TOS系统&#xff1b; 2.单击TOS桌面-控制面板-网络服务-网站服务器&#xff1b; 3.勾选启用网站服务器&#xff1b; 4.设置网站服务器端口号&am…

如何利用铁威马NAS搭建网站服务器

Web Server可以将TNAS 架设成一个网站服务器&#xff0c;在网站服务器中设定多个虚拟主机。如需启用网站服务器功能&#xff0c;需要开启网站服务器。 如何利用铁威马NAS搭建网站服务器 1.TOS应用中心Web Serve应用&#xff1b; 2.下载完成后&#xff0c;单击桌面&#xff0c…

推荐Maven Repository网站

该网站提供Maven/Ivy各类软件最新版本信息&#xff0c;并提供dependency配置信息&#xff0c;非常方便。Http链接地址&#xff1a;Maven Repository