MySQL中count(distinct?col...)組合使用的注意要點(diǎn)詳解
第一步:數(shù)據(jù)準(zhǔn)備
mysql> select * from my_student; +----+------------+-----------+--------+--------+ | id | number | name | sex | addr | +----+------------+-----------+--------+--------+ | 1 | itcast0001 | Jim | female | 北京 | | 2 | itcast0002 | HanMeimei | female | 上海 | | 3 | itcast0003 | Kate | female | NULL | | 4 | itcast0004 | Tom | male | NULL | | 5 | itcast0005 | LinTao | male | NULL | | 6 | itcast0006 | 張?jiān)? | 女 | NULL | +----+------------+-----------+--------+--------+ 6 rows in set (0.00 sec)
第二步:數(shù)據(jù)驗(yàn)證
1.distinct單字段去重
mysql> select distinct addr from my_student; +--------+ | addr | +--------+ | 北京 | | 上海 | | NULL | +--------+ 3 rows in set (0.00 sec)
2.count和distinct配合使用
1).count(distinct col) 計(jì)算該列除 NULL 之外的不重復(fù)行數(shù)。
mysql> select count(distinct addr) from my_student; ① +----------------------+ | count(distinct addr) | +----------------------+ | 2 | +----------------------+ 1 row in set (0.00 sec) -- 把上述SQL改寫成 select count(1) from (select distinct col from ...) a; mysql> select count(1) from (select distinct addr from my_student) a; ② +----------+ | count(1) | +----------+ | 3 | +----------+ 1 row in set (0.00 sec)
注意比較①和②的結(jié)果,是不同的.
2).count(distinct col1, col2) 如果其中一列全為 NULL,那么即使另一列有不同的值,也返回為 0。
mysql> select distinct sex,addr from my_student; +--------+--------+ | sex | addr | +--------+--------+ | female | 北京 | | female | 上海 | | female | NULL | | male | NULL | | 女 | NULL | +--------+--------+ 5 rows in set (0.00 sec) mysql> select count(distinct sex,addr) from my_student; ③ +--------------------------+ | count(distinct sex,addr) | +--------------------------+ | 2 | +--------------------------+ 1 row in set (0.00 sec) mysql> select count(1) from (select distinct sex,addr from my_student) a; ④ +----------+ | count(1) | +----------+ | 5 | +----------+ 1 row in set (0.00 sec)
注意比較③和④的結(jié)果,也是不同的.
3.上述同樣的操作在oracle數(shù)據(jù)庫驗(yàn)證
1).針對(duì)上述1)的場(chǎng)景在oracle數(shù)據(jù)庫中驗(yàn)證后,count(distinct col)也是會(huì)計(jì)算該列除 NULL 之外的不重復(fù)行數(shù),同MySQL一樣
2).針對(duì)上述2)的場(chǎng)景,count(distinct col1, col2)的寫法在oracle數(shù)據(jù)庫中不支持.
總結(jié)
到此這篇關(guān)于MySQL中count(distinct col...)組合使用的注意要點(diǎn)的文章就介紹到這了,更多相關(guān)MySQL count(distinct col...)組合使用內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
CentOS 7下MySQL服務(wù)啟動(dòng)失敗的快速解決方法
CentOS 7下MySQL服務(wù)啟動(dòng)失敗怎么辦?下面小編就為大家?guī)硪黄狢entOS 7下MySQL服務(wù)啟動(dòng)失敗的快速解決方法?,F(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2016-03-03解決mysql錯(cuò)誤:Subquery?returns?more?than?1?row問題
這篇文章主要介紹了解決mysql錯(cuò)誤:Subquery?returns?more?than?1?row問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-05-05阿里云ECS centos6.8下安裝配置MySql5.7的教程
阿里云默認(rèn)yum命令下的MySQL是5.17****,安裝mysql5.7之前先卸載以前的版本。下面通過本文給大家介紹阿里云ECS centos6.8下安裝配置MySql5.7的教程,需要的的朋友參考下吧2017-07-07Mysql中的concat函數(shù)(拼接函數(shù))詳解
很多時(shí)候,我們需要將不同地方獲得的字符串拼接在一起,此時(shí)就需要使用CONCAT和CONCAT_WS函數(shù),這篇文章主要介紹了Mysql中的concat函數(shù)(拼接函數(shù)),需要的朋友可以參考下2023-02-02深入分析MySQL數(shù)據(jù)類型 DECIMAL
這篇文章主要介紹了MySQL數(shù)據(jù)類型 DECIMAL的相關(guān)資料,幫助大家更好的理解和使用MySQL數(shù)據(jù)庫,感興趣的朋友可以了解下2020-09-09Mysql8創(chuàng)建用戶及賦權(quán)操作實(shí)戰(zhàn)記錄
一般在開發(fā)中,我們需要新建一個(gè)賬戶,并賦予某個(gè)數(shù)據(jù)庫的訪問權(quán)限,下面這篇文章主要給大家介紹了關(guān)于Mysql8創(chuàng)建用戶及賦權(quán)操作的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),需要的朋友可以參考下2022-04-04MySQL報(bào)錯(cuò)1040'Too?many?connections'的原因以及解決方案
這篇文章主要給大家介紹了關(guān)于MySQL報(bào)錯(cuò)1040'Too?many?connections'的原因以及解決方案,文中通過實(shí)例代碼以及圖文介紹的非常詳細(xì),需要的朋友可以參考下2022-07-07mysql臨時(shí)表(temporary?table)使用方法詳解
MySQL臨時(shí)表在很多場(chǎng)景中都會(huì)用到,MySQL內(nèi)部在執(zhí)行復(fù)雜SQL時(shí),需要借助臨時(shí)表進(jìn)行分組、排序、去重等操作,下面這篇文章主要給大家介紹了關(guān)于mysql臨時(shí)表(temporary?table)使用方法的相關(guān)資料,需要的朋友可以參考下2024-01-01