Mysql按标准计数多种多样完成方式分析

2021-02-19 10:04| 发布者: | 查看: |

难题叙述 过去有一个皇上,他有50个妃子,这种妃子很沒有天理的给他们生了100,000个孩子,因此,皇上很烦恼,大量的孩子难以管理方法,并且,他想要知道每一个妃子给他们生了是多少个孩子,进而照功行赏,这难以办。因此,皇上请了一个程序猿帮他编了一个程序,用数据信息库来储存全部的孩子的信息内容,那样便可以用程序来统计分析和管理方法啦。 数据信息库的构造以下: Mysql按条件计数多种实现方法解析 皇上把妃子分为了2个级别,天宫娘娘(序号低于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方式的较大难题取决于:没法区别个人所得到的結果。这2个数据哪个是天宫娘娘们所生的皇子数,哪个是地宫娘娘们所生的皇子数呢?不知道道。因此,虽然它统计分析出了数量,可是沒有甚么实际意义。 因而,以便区别统计分析結果,务必要把标准 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~16号、11~211号,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 THEN 1 ELSE NULL END ) AS `digong`, 
 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到来简易方便快捷。

<
>

 
QQ在线咨询
售前咨询热线
18720358503
售后服务热线
18720358503
返回顶部