难题叙述
过去有一个皇上,他有50个妃子,这种妃子很沒有天理的给他们生了100,000个孩子,因此,皇上很烦恼,大量的孩子难以管理方法,并且,他想要知道每一个妃子给他们生了是多少个孩子,进而照功行赏,这难以办。因此,皇上请了一个程序猿帮他编了一个程序,用数据信息库来储存全部的孩子的信息内容,那样便可以用程序来统计分析和管理方法啦。
数据信息库的构造以下:
![]() 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到来简易方便快捷。 |