最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

MySQL中distinct與group by語(yǔ)句的一些比較及用法講解

 更新時(shí)間:2016年01月13日 15:31:16   作者:jia58960  
這篇文章主要介紹了MySQL中distinct與group by的一些比較及用法講解,二者在查詢(xún)操作中的用法有很多相似之處,需要的朋友可以參考下

在數(shù)據(jù)表中記錄了用戶(hù)驗(yàn)證時(shí)使用的書(shū)目,現(xiàn)在想取出所有書(shū)目,用DISTINCT和group by都取到了我想要的結(jié)果,但我發(fā)現(xiàn)返回結(jié)果排列不同,distinct會(huì)按數(shù)據(jù)存放順序一條條顯示,而group by會(huì)做個(gè)排序(一般是ASC)。
 
        DISTINCT 實(shí)際上和 GROUP BY 操作的實(shí)現(xiàn)非常相似,只不過(guò)是在 GROUP BY 之后的每組中只取出一條記錄而已。所以,DISTINCT 的實(shí)現(xiàn)和 GROUP BY 的實(shí)現(xiàn)也基本差不多,沒(méi)有太大的區(qū)別,同樣可以通過(guò)松散索引掃描或者是緊湊索引掃描來(lái)實(shí)現(xiàn)。
 
      那DISTINCT 和GROUP BY哪個(gè)效率更高?
 
       DISTINCT操作只需要找出所有不同的值就可以了。而GROUP BY操作還要為其他聚集函數(shù)進(jìn)行準(zhǔn)備工作。從這一點(diǎn)上將,GROUP BY操作做的工作應(yīng)該比DISTINCT所做的工作要多一些。
 
      但實(shí)際上,GROUP BY 效率會(huì)更高點(diǎn),為什么呢?對(duì)于DISTINCT操作,它會(huì)讀取了所有記錄,而GROUP BY需要讀取的記錄數(shù)量與分組的組數(shù)量一樣多,也就是說(shuō)比實(shí)際存在的記錄數(shù)目要少很多。

下面來(lái)看MySQL中distinct及group by的一些用法分享。

CREATE TABLE `student` (          
      `name` varchar(20) NOT NULL DEFAULT '', 
      `age` int(10) DEFAULT '0'        
     ) ENGINE=InnoDB DEFAULT CHARSET=latin1

1.測(cè)試一

select * from student;   

  

a  5
a  5
c  0

用distinct過(guò)濾掉兩列都相同的記錄

select distinct name,age from student;

返回

a  5
c  0

2.測(cè)試二
將表student的數(shù)據(jù)改為如下:

select * from student;
c  2
c  5

select distinct name,age from student;

返回如下,說(shuō)明distinct后面有多于一列的字段時(shí),只有每列的值完全相同才過(guò)濾

c  2
c  5

3.測(cè)試三

select * from student;
name age height
c  2  123
c  2  456
b  20  222

group by按兩列同時(shí)分組

select name,age,sum(height) from student group by name,age;
b  20  222
c  2  579

group by按兩列同時(shí)分組,同時(shí)在后面加上having的條件

select name,age,sum(height) as n from student group by name,age having n > 500;
 

返回
c    2    579

4.測(cè)試四
關(guān)于group by后面limit的測(cè)試

復(fù)制代碼 代碼如下:

select songname,sengerid,count(sengerid) as n from t_song group by songname,sengerid having n > 1 ORDER BY n DESC,songid ASC limit 10;

未知  8738  40
共同渡過(guò)  1432  24
風(fēng)繼續(xù)吹  1432  23
倩女幽魂  1432  23
無(wú)心睡眠  1432  23
羅百吉超嗨派對(duì)連續(xù)組曲  780  19
拒絕再玩  1432  19
風(fēng)再起時(shí)  1432  18
每天愛(ài)你多一些  1480  18
千言萬(wàn)語(yǔ)  1794  18

復(fù)制代碼 代碼如下:

select songname,sengerid,count(sengerid) as n from t_song group by songname,sengerid having n > 1 ORDER BY n DESC,songid ASC limit 5;


未知  8738  40
共同渡過(guò)  1432  24
風(fēng)繼續(xù)吹  1432  23
倩女幽魂  1432  23
無(wú)心睡眠  1432  23

經(jīng)過(guò)以上兩個(gè)測(cè)試可以看出,如果sql語(yǔ)句中含有l(wèi)imit,limit是對(duì)用group by進(jìn)行分組,并進(jìn)行相關(guān)計(jì)算以后的limit操作,而不是對(duì)limit后面的指定記錄數(shù)進(jìn)行分組,從n那一列的數(shù)據(jù)每一行的值都大于10就可以看出來(lái)。

5.測(cè)試五
用以下的兩種形式的distinct均可以得到相同的記錄數(shù),寫(xiě)法不一樣,結(jié)果是一樣的。

select count(distinct(songid)) from feedback;

select count(distinct songid) from feedback;

6.測(cè)試六
field singername is string,max(singername),如果singername有些列為空,有些列不為空,則max(singername)取非空的值,如果一列為zxx,一列為lady,則取zxx,按字母順利取的。

復(fù)制代碼 代碼如下:

select feedback_id,songid,songname,max(singername),max(time) as new_time from feedback group by songid order by new_time desc;


7.Sql語(yǔ)句中where,group by,order by及l(fā)imit的順序

where xxx,group by xxx,order by xxx,limit xxx

8.關(guān)于group by與count的問(wèn)題
如果sql語(yǔ)句中含有g(shù)roup by,則最好不要將count sql轉(zhuǎn)換為select count(*) from xxx,否則select與from之間的字段很有可能是后面要使用的,例如

復(fù)制代碼 代碼如下:

select feedback_id,songid,songname,max(singername),max(time) as new_time from feedback group by songid order by new_time desc;


復(fù)制代碼 代碼如下:

MySQL Query Error: SELECT COUNT(*) FROM feedback GROUP BY songid ORDER BY new_time DESC Error Info:Unknown column 'new_time' in 'order clause'


相關(guān)文章

  • Mysql無(wú)法選取非聚合列的解決方法

    Mysql無(wú)法選取非聚合列的解決方法

    這篇文章主要給大家介紹了關(guān)于Mysql無(wú)法選取非聚合列的解決方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2018-09-09
  • mysql觸發(fā)器中包含select語(yǔ)句問(wèn)題

    mysql觸發(fā)器中包含select語(yǔ)句問(wèn)題

    這篇文章主要介紹了mysql觸發(fā)器中包含select語(yǔ)句問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-08-08
  • MySQL8.0.11安裝總結(jié)教程圖解

    MySQL8.0.11安裝總結(jié)教程圖解

    本文通過(guò)圖文并茂的形式給大家介紹了MySQL8.0.11安裝總結(jié),非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友參考下吧
    2018-05-05
  • Sql在單一表中檢索數(shù)據(jù)的方法詳解

    Sql在單一表中檢索數(shù)據(jù)的方法詳解

    這篇文章主要介紹了Sql在單一表中檢索數(shù)據(jù)的方法,SELECT語(yǔ)句是SQL中最常用的語(yǔ)句。它的用途是從一個(gè)或多個(gè)表中檢索信息。為了使用SELECT檢索表數(shù)據(jù),必須至少給出兩條信息:想選擇什么、從什么地方選擇
    2023-02-02
  • 解決MySQL批量新增或修改時(shí)出現(xiàn)異常:Lock?wait?timeout?exceeded

    解決MySQL批量新增或修改時(shí)出現(xiàn)異常:Lock?wait?timeout?exceeded

    這篇文章主要給大家介紹了關(guān)于如何解決MySQL批量新增或修改時(shí)出現(xiàn)異常:Lock?wait?timeout?exceeded;try?restarting?transaction的相關(guān)資料,需要的朋友可以參考下
    2024-01-01
  • MySQL 回表,覆蓋索引,索引下推

    MySQL 回表,覆蓋索引,索引下推

    這篇文章主要介紹了MySQL 回表,覆蓋索引,索引下推,就是我們需要查詢(xún)的數(shù)據(jù)都在二級(jí)索引樹(shù)中,直接返回這種情況就叫做覆蓋索引
    2022-07-07
  • mysqli預(yù)處理編譯的深入理解

    mysqli預(yù)處理編譯的深入理解

    記得以前寫(xiě)過(guò)mysqli的預(yù)處理的php教程,現(xiàn)在整理一下,需要的朋友可以參考
    2012-12-12
  • MySQL實(shí)現(xiàn)批量插入測(cè)試數(shù)據(jù)的方式總結(jié)

    MySQL實(shí)現(xiàn)批量插入測(cè)試數(shù)據(jù)的方式總結(jié)

    在開(kāi)發(fā)過(guò)程中經(jīng)常需要一些測(cè)試數(shù)據(jù),?這個(gè)時(shí)候如果手敲的話(huà),?十行二十行還好,?多了就很死亡了,?接下來(lái)介紹兩種常用的MySQL測(cè)試數(shù)據(jù)批量生成方式,希望對(duì)大家有所幫助
    2023-05-05
  • MySQL?中如何歸檔數(shù)據(jù)的實(shí)現(xiàn)方法

    MySQL?中如何歸檔數(shù)據(jù)的實(shí)現(xiàn)方法

    本文主要介紹了MySQL?中如何歸檔數(shù)據(jù)的實(shí)現(xiàn)方法,文中通過(guò)示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-03-03
  • MYSQL代碼 定期備份Mysql數(shù)據(jù)庫(kù)

    MYSQL代碼 定期備份Mysql數(shù)據(jù)庫(kù)

    Mysql自動(dòng)備份腳本供大家參考,實(shí)現(xiàn)了定期備份Mysql數(shù)據(jù)庫(kù),并且可以選在在每周的一天做指定目錄下文件的全面?zhèn)浞?,備份文件自?dòng)上傳到你指定的FTP上,保證了備份的可靠性。
    2009-04-04

最新評(píng)論

临澧县| 赫章县| 平安县| 海口市| 葫芦岛市| 镇安县| 呼和浩特市| 漯河市| 永城市| 安平县| 汤原县| 西贡区| 吉林省| 兰坪| 潼关县| 双辽市| 洞口县| 桂平市| 丰城市| 繁峙县| 赤峰市| 开阳县| 兰州市| 麟游县| 玉溪市| 安国市| 临邑县| 威海市| 巨野县| 上犹县| 揭西县| 隆安县| 平顶山市| 高邮市| 新田县| 蓬安县| 酒泉市| 沈阳市| 东辽县| 小金县| 德令哈市|