MySQL初学者可以告别分组聚合查询的困扰了


1.鍒嗙粍鏌ヨ鐨勫師鐞嗗浘

鍦ㄨ繖閲屾彃鍏ュ浘鐗囨弿杩? src=

瀵逛笂杩板師濮嬫暟鎹紝鎸夌収DEPARTMENT_ID(鍛樺伐id)鍒嗙粍缁熻SALARY(钖按)鐨勫钩鍧囧笺?/p>

鍦ㄨ繖閲屾彃鍏ュ浘鐗囨弿杩? src=

涓婅堪鍘熺悊鍐欐垚浠g爜锛屽簲璇ユ庝箞鍐欏憿锛?/p>

select 
	department_id,avg(salary)
from 
	test
group by 
	department_id;

鍙互娓呮鍦扮湅鍒帮紝浣跨敤department_id杩涜鍒嗙粍鍚庯紝绯荤粺榛樿灏?code>department_id鐩稿悓鐨勫彿鎵鍦ㄧ殑琛岋紝鍒嗛厤鍦ㄤ竴璧凤紝浣犳湁鍑犱釜涓嶅悓鐨?code>department_id锛屽氨浼氬垎涓哄嚑缁勶紝姣忎釜缁勪腑鐨勬暟鎹鏁帮紝涓嶄竴瀹氶兘瑕佺浉鍚屻?/p>

褰撹嚜鍔ㄥ垎閰嶅畬鎴愬悗锛屼細鏍规嵁浣犳墍鍐欑殑鍒嗙粍鍑芥暟锛岃繘琛岀粍鍐呰繍绠椼?/p>

涔熷氨鏄锛屼綘浣跨敤鐨勬槸sum()鍑芥暟锛屽氨浼氱粍鍐呮眰鍜岋紱褰撲綘浣跨敤鐨勬槸avg()鍑芥暟锛屽氨浼氱粍鍐呮眰骞冲潎鍊硷紱褰撲綘浣跨敤鐨勬槸count()鍑芥暟锛屽氨浼氳繘琛岀粍鍐呰鏁帮紱褰撲綘浣跨敤鐨勬槸max()鍑芥暟锛屽氨浼氳繘琛岀粍鍐呮眰鏈澶у硷紱浣犱娇鐢ㄧ殑鏄?code>min()鍑芥暟锛屽氨浼氳繘琛岀粍鍐呮眰鏈灏忓笺?/p>

2.group by鍏抽敭瀛楄娉曡瑙?/h2>

鏈変簺灏忕櫧鍦ㄥ涔燤ySQL鐨勮繃绋嬩腑锛屽緢澶氶兘鏄湪group by鍏抽敭瀛楄繖涓湴鏂瑰崱澹炽備簬鏄垜甯屾湜鑷繁鑳藉鐢ㄧ櫧璇濆浘鏂囩殑鏂瑰紡锛岃浣犵湡姝f悶鏄庣櫧杩欎釜鍏抽敭瀛楃殑鍚箟銆?/p>

鍦ㄨ繖閲屾彃鍏ュ浘鐗囨弿杩? src=

group by鏄敤浜庡垎缁勬煡璇㈢殑鍏抽敭瀛楋紝涓鑸槸閰嶅悎sum(),avg(),count(),max(),min()鑱氬悎鍑芥暟浣跨敤鐨勩備篃灏辨槸璇碨QL璇彞涓彧瑕佹湁group by锛岄偅涔堝湪select鍚庨潰鐨勫睍绀哄瓧娈典腑涓鑸細鏈夎仛鍚堝嚱鏁?5涓仛鍚堝嚱鏁?涓殑涓涓垨澶氫釜鍑芥暟鍑虹幇銆傝瀵熶笂鍥撅紝鏈変竴鐐逛綘闇瑕佽浣忥紝浣犵敤琛ㄤ腑鐨勫瓧娈礎杩涜鍒嗙粍鍚庯紝涓鑸氨闇瑕佸琛ㄤ腑鐨勫叾瀹冨瓧娈碉紝浣跨敤鑱氬悎鍑芥暟锛岃繖鏍锋剰涔夋洿澶э紝鑰屼笉鏄繕瀵瑰瓧娈礎浣跨敤鑱氬悎鍑芥暟锛屾病鍟ュお澶ф剰涔夈?/p>

鎴戜滑鍐嶆濊冧笅闈㈣繖涓棶棰橈紒

褰揝QL璇彞涓娇鐢ㄤ簡group by鍚庯紝鍦╯elect鍚庨潰涓瀹氭湁涓涓瓧娈典娇鐢ㄤ簡鑱氬悎鍑芥暟(5涓仛鍚堝嚱鏁?銆備絾鏄櫎浜嗚繖涓仛鍚堝嚱鏁帮紝select鍚庨潰杩樺彲浠ユ坊鍔犲叾浠栦粈涔堝瓧娈靛悧锛?/p>

绛旀鑲畾鏄彲浠ョ殑锛佷絾鏄瀛楁鏈変竴瀹氱殑闄愬埗锛屽苟涓嶆槸浠涔堝瓧娈甸兘鍙互銆備篃灏辨槸璇达紝褰揝QL璇彞涓娇鐢ㄤ簡group by鍏抽敭瀛楀悗锛宻elect鍚庨潰闄や簡鑱氬悎鍑芥暟锛屽氨鍙兘鏄?code>group by鍚庨潰鍑虹幇鐨勫瓧娈点備篃灏辨槸鍥句腑鐨勫瓧娈礎锛宻elect鍚庨潰鍙兘瀛樺湪group by鍚庨潰鐨勫瓧娈点?/p>

3.涓涓畝鍗曠殑鍒嗙粍鏌ヨ鐨勬渚?/h2>

妗堜緥 锛氭寜鐓ч儴闂ㄧ紪鍙穌eptno鍒嗙粍锛岀粺璁℃瘡涓儴闂ㄧ殑骞冲潎宸ヨ祫銆?/p>

select 
    deptno,avg(sal) avgs
from 
    emp
group by 
    deptno

缁撴灉濡備笅锛?/p>

鍦ㄨ繖閲屾彃鍏ュ浘鐗囨弿杩? src=

4.鍒嗙粍鍓嶇瓫閫夊拰鍒嗙粍鍚庣瓫閫?/h2>

杩欎釜鐭ヨ瘑鐐瑰氨鏄甯︾潃澶у鐞嗚В涓涓嬶紝浠涔堜娇鐢ㄨ鐢╳here绛涢夛紵浠涔堟椂鍊欒鐢╤aving绛涢夛紵杩欎釜鐭ヨ瘑鐐瑰浜庡涔燤ySQL鐨勫皬鐧芥潵璇达紝涔熸槸涓涓鎵嬬殑浜嬪効銆備笉鐢ㄦ媴蹇冿紝璺熺潃榛勫悓瀛﹀MySQL锛屾病鏈夊涓嶄細鐨勩?/p>

1锛夊師濮嬭〃鍜岀粨鏋滈泦鐨勬蹇?/h3>

鍘熷琛ㄦ寚鐨勬槸鏁版嵁搴撲腑鐪熸瀛樺湪鐨勯偅涓〃锛屼娇鐢ㄣ恠elect * from 琛ㄥ悕銆戞煡璇㈠嚭鏉ョ殑灏辨槸鍘熷琛ㄤ俊鎭傜粨鏋滈泦鎸囩殑鏄湪SQL璇彞涓紝娣诲姞鍏跺畠浠讳綍涓涓檺鍒舵潯浠讹紝鏈缁堝睍绀虹粰鎴戜滑琛紝閮芥槸缁撴灉闆嗐傛坊鍔犱笉鍚岀殑闄愬埗鏉′欢锛屾煡璇㈠嚭鏉ョ殑缁撴灉闆嗕篃鏄笉鍚岀殑銆傚師濮嬭〃鍙湁涓涓紝缁撴灉闆嗗嵈鏄悇绉嶅悇鏍风殑銆?/p>

2锛夐粍鍚屽鏀ぇ鎷?/h3>

鍙鏄渶姹備腑锛屾秹鍙婂埌鑱氬悎鍑芥暟鍋氭潯浠剁殑鎯呭喌锛屼竴瀹氭槸鍒嗙粍鍚庣殑绛涢夈傝兘鐢ㄥ垎缁勫墠绛涢夌殑锛屽氨浼樺厛鑰冭檻鍒嗙粍鍓嶇殑绛涢夈?鑰冭檻鍒版ц兘闂)

鍦ㄨ繖閲屾彃鍏ュ浘鐗囨弿杩? src= 

3锛夋渚嬭瑙?/h3>

鍘熷鏁版嵁闆嗗涓嬶細

鍦ㄨ繖閲屾彃鍏ュ浘鐗囨弿杩? src=

鈶?鍒嗙粍鍓嶇瓫閫?/p>

涔犻涓锛氭煡璇㈠鍚嶄腑鍖呭惈S瀛楃鐨勶紝姣忎釜閮ㄩ棬鐨勫伐璧勪箣鍜屻?/p>

鍦ㄨ繖閲屾彃鍏ュ浘鐗囨弿杩? src=

涔犻浜岋細鏌ヨ宸ヨ祫澶т簬2000鐨勶紝涓嶅悓閮ㄩ棬鐨勫钩鍧囧伐璧勩?/p>

鍦ㄨ繖閲屾彃鍏ュ浘鐗囨弿杩? src=

鈶?鍒嗙粍鍚庣瓫閫?/p>

涔犻涓锛氭煡璇㈤儴闂ㄥ憳宸ヤ釜鏁板ぇ浜?鐨勯儴闂ㄧ紪鍙峰拰鍛樺伐涓暟銆?/p>

鍦ㄨ繖閲屾彃鍏ュ浘鐗囨弿杩? src=

涔犻浜岋細鏌ヨ姣忎釜閮ㄩ棬鏈楂樺伐璧勫ぇ浜?000鐨勯儴闂ㄧ紪鍙峰拰鏈楂樺伐璧勩?/p>

鍦ㄨ繖閲屾彃鍏ュ浘鐗囨弿杩? src=

鈶?鍒嗙粍鍓嶇瓫閫夊拰鍒嗙粍鍚庣瓫閫夊悎鐢?/p>

涔犻锛氭煡璇?981骞村叆鑱岀殑锛屼笉鍚岄儴闂ㄩ棿宸ヨ祫鐨勫钩鍧囧煎ぇ浜?000鐨勯儴闂ㄧ紪鍙峰拰骞冲潎鍊笺?/p>

鍦ㄨ繖閲屾彃鍏ュ浘鐗囨弿杩? src=

5.鍒嗙粍鏌ヨ(鎸夊嚱鏁板垎缁?

涔犻锛氭寜鍛樺伐濮撳悕鐨勯暱搴﹀垎缁勶紝鏌ヨ姣忎竴缁勭殑鍛樺伐涓暟锛岀瓫閫夊憳宸ヤ釜鏁?gt;3鐨勬湁鍝簺锛?/p>

select length(ename) len,count(*) counts
from emp
group by len
having counts > 3;

缁撴灉濡備笅锛?/p>

鍦ㄨ繖閲屾彃鍏ュ浘鐗囨弿杩? src=

6.鍒嗙粍鏌ヨ(鎸夊涓瓧娈靛垎缁?

涔犻锛氭煡璇㈡瘡涓儴闂ㄦ瘡涓伐绉嶇殑鍛樺伐鐨勫钩鍧囧伐璧勩?/p>

鍦ㄨ繖閲屾彃鍏ュ浘鐗囨弿杩? src=

7.group by鍜宱rder by锛屼竴瀵硅佹惌妗?/h2>

涔犻涓锛氭煡璇㈡瘡涓儴闂ㄧ殑鍛樺伐鐨勫钩鍧囧伐璧勶紝鎸夌収骞冲潎宸ヨ祫闄嶅簭銆?/p>

鍦ㄨ繖閲屾彃鍏ュ浘鐗囨弿杩? src=

涔犻浜岋細鏌ヨ姣忎釜閮ㄩ棬鐨勫憳宸ョ殑骞冲潎宸ヨ祫锛屾寜鐓у钩鍧囧伐璧勫崌搴忋?/p>

鍦ㄨ繖閲屾彃鍏ュ浘鐗囨弿杩? src=

8.鍒嗙粍鏌ヨ鐨勬荤粨

1锛夊垎缁勫嚱鏁板仛鏉′欢锛岃偗瀹氭槸鏀惧湪having瀛愬彞涓?/p>

2锛夎兘鐢ㄥ垎缁勫墠绛涢夌殑锛屽氨浼樺厛鑰冭檻浣跨敤鍒嗙粍鍓嶇瓫閫夈傦紙where绛涢夛級

3锛?code>group by瀛愬彞鏀寔鍗曚釜瀛楁鍒嗙粍锛屽涓瓧娈靛垎缁?澶氫釜瀛楁涔嬮棿鐢ㄩ楀彿闅斿紑娌℃湁椤哄簭瑕佹眰)锛岃繕鏀寔鍑芥暟鍒嗙粍(鐢ㄧ殑杈冨皯)銆?/p>

浠ヤ笂灏辨槸MySQL鍒濆鑰呭彲浠ュ憡鍒垎缁勮仛鍚堟煡璇㈢殑鍥版壈浜嗙殑璇︾粏鍐呭锛屾洿澶氬叧浜嶮ySQL鍒嗙粍鑱氬悎鏌ヨ鐨勮祫鏂欒鍏虫敞鑴氭湰涔嬪鍏跺畠鐩稿叧鏂囩珷锛?/p>