1. 程式人生 > >MySQL -- SQL查詢排序/分組/篩選

MySQL -- SQL查詢排序/分組/篩選

一、SQL查詢排序/分組/篩選

    (1)、總結(執行順序)

       3、select ... 聚合函式 from ...
       1、where ...
       2、group by ...
       4、having ...
       5、order by ...
       6、limit ...;

        注:一條SQL命令的執行順序,一般先執行where語句,最後執行limit。下面分別介紹下group by、having、order by、limit的用法。

    (2)、order by

        1、作用:對查詢的結果進行排序


        2、語法格式:order by 欄位名 排序方式;
        3、排序方式
            1、ASC(預設):升序
            2、DESC:降序
        4、練習(參考《MySQL -- 表記錄管理和運算子操作》建立一個MoShou庫)


            1、將英雄按防禦值從低到高排序
                select * from sanguo order by fangyu ASC;


            2、將蜀國英雄按攻擊值從高到低排序
                select * from sanguo where country="蜀國" order by gongji desc;


            3、將魏蜀兩國男英雄中名字為三個字的英雄按防禦值升序排序
                select * from sanguo where country in("蜀國","魏國") and sex="男" and name like "___" order by fangyu asc;

    (3)、limit(永遠放在SQL語句的最後面)

        1、作用:限制顯示查詢記錄的條數
        2、用法
            1、limit n -->顯示幾條記錄
            2、limit m,n 
                m表示從第幾條記錄開始顯示,n表示顯示幾條;
                m的值是從0開始計數的,3從第四條記錄開始
                limit 1,3 --> 顯示 2、3、4 三條記錄
            3、練習
                1、查詢防禦值倒數第二名至倒數第四名的蜀國英雄記錄
                    select * from sanguo where country="蜀國" order by fangyu asc limit 1,3


                2、查詢攻擊值前三名且名字不為空值得蜀國英雄的名字,攻擊值和國家
                    select name,gongji,country from sanguo where name is not null and country="蜀國" order by gongji desc limit 3;

    (4)、聚合函式

        1、分類
            1、avg(欄位名) : 求欄位的平均值
            2、sum(欄位名) : 求欄位的和
            3、max(欄位名) : 求欄位的最大值
            4、min(欄位名) : 求欄位的最小值
            5、count(欄位名) : 統計該欄位的記錄的個數
        2、練習
            1、攻擊力最強值是多少
                select max(gongji) from sanguo;
                select max(gongji) as zqgj from sanguo;


            2、統計一下表中id,name欄位分別有多少條記錄
                select count(id),count(name) from sanguo;


                # 空值NULL不會被統計,空字串""會被統計
            3、計算蜀國英雄的總攻擊力
                select sum(gongji) from sanguo where country="蜀國";


            4、統計蜀國英雄中攻擊值大於200的英雄的數量
                select count(*) from sanguo where country="蜀國" and gongji>200;

    (5)、group by        

        1、作用:給查詢的結果進行分組,通常配合聚合函式一起使用
        2、語法格式:group by 欄位名

        3、練習
            1、查詢sanguo表中一共有幾個國家
                select country from sanguo group by country;


            2、計算所有國家的平均攻擊力
                select country,avg(gongji) from sanguo group by country;


            3、查詢所有國家中,英雄數量最多的前2名的國家的名稱及英雄資料
                select country,count(*) from sanguo group by country order by count(*) desc limit 0,2;


        4、注意:
            1、group by後的欄位名必須要為select之後的欄位名
            2、group by處理的是group by之後的所有欄位,如果查詢欄位和group by之後的欄位不一致,則必須要對該欄位值做聚合處理(聚合函式)

    (6)、having

        1、作用:對查詢的結果進行進一步篩選,通常配合group by使用
        2、語法格式:group by 欄位名 having 條件                                                                                                                                      3、練習:
            1、找出平均攻擊力大於105的國家的前兩名,顯示國家名和平均攻擊力
                select country,avg(gongji) from sanguo group by country having avg(gongji)>105 order by avg(gongji) desc limit 2;


        4、注意
            1、having語句通常與group by語句聯合使用,用來過濾由group by語句返回的記錄集
            2、having語句的存在彌補了where關鍵字不能與聚合函式聯合使用的不足,having操作的是聚合函式生成的顯示列

    (7)、distinct

        1、作用:不顯示欄位的重複值
        2、語法格式:select distinct 欄位名列表 from 表名;                                                                                                                          3、練習:
            1、sanguo表中一共有多少個國家
                select distinct country from sanguo;


            2、計算蜀國一共有多少個英雄
                select count(distinct id) from sanguo where country="蜀國";


        4、注意:
            1、distinct處理的是distinct與from之間的所有欄位,所有欄位必須全部相同才能去重
            2、distinct不能對任何欄位做聚合處理    

    (8)、查詢表記錄時做數學運算

        1、運算子:+ - * / %
        2、練習
            1、查詢時顯示所有英雄的攻擊力*10
                select id,name,gongji*10 as xgjl from sanguo;


            2、查詢時顯示所有英雄的防禦力+5
                select id,name,fangyu+5 as xfy from sanguo;

相關推薦

MySQL -- SQL查詢排序/分組/篩選

一、SQL查詢排序/分組/篩選     (1)、總結(執行順序)        3、select ... 聚合函式 from ...        1、where ...        2、group by ...        4、having ...        5

mysql分組查詢分組篩選(講義)

----分組查詢&篩選學習: --關鍵字:group by 分組欄位名,分組欄位名.... --注意1:使用了分組後,在select語句中只允許出現分組欄位和多行函式。 --注意2:如果是多欄位分組,則先按照第一欄位分組,

解決 mysql in 查詢排序問題

select id,title from za_item where -- id in (1003,1000) 返回的結果第一條是對應id是1000,第二條是1003。 如果我們想讓結果和in裡面的排序一致,可以這麼做。 select id,title from za_i

Mysql SQL查詢今天、昨天、n天內、第n天的資料 Mysql SQL查詢今天、昨天、n天內、第n天

Mysql SQL查詢今天、昨天、n天內、第n天 注意:因為對索引列使用函式會導致索引失效,如果查詢時需要使用到索引,請使用MySQL DATE_SUB() 函式 查詢當天的所有資料 SELECT * FROM 表名 WHERE DATEDIFF(欄位,NOW())

Mysql----SQL查詢

   總結       ①where ...                 [無法操作聚合函式生成的數]     &

Mysql SQL查詢效能調優(一)

MYSQL效能調優 varchar型別的欄位在編寫SQL時,一定要加單引號,否則如果該欄位是索引的話,則不起作用,在大數量查詢時,效能很差 PS:大坑 建立必要的索引提高SQL查詢效能 ​ 主鍵(聚集)索引、非聚集索引(普通索引,唯一索引,全

mysql--sql查詢練手

上網找了個sql查詢練習題,想看看自己完成的咋樣,感覺都不難,45道題全部攻破,有些題給了2種解法,事實上很多子查詢能搞定的,連線查詢也可以。 #28題想了一會想有了答案,腦瓜子還是不夠

mysql查詢每個分組的前幾名

注意:!!!排序後分組出來的結果中非分組欄位是隨機的記錄中的資料,並不是按排序中的結果的第一條顯示的 綜合推薦的兩種方式(已經測試了結果是可行的方案): 1.分組取前n條記錄 SELECT b.id, b.wx_user_i

Mysql----SQL查詢語句執行順序

SQL查詢語句執行順序如下: (7) SELECT (8) DISTINCT <select_list> (1) FROM <left_table>(3) <join_type> JOIN <right_table>

Mysql SQL查詢今天、昨天、n天內、第n天

SQL語句如下: 注意:因為對索引列使用函式會導致索引失效,如果查詢時需要使用到索引,請使用MySQL DATE_SUB() 函式 查詢當天的所有資料 SELECT * FROM 表名 WHE

MYSQL sql 查詢每個班級的第二名

面試題碰到的,做出來看一下SELECT MAX(SCORE) AS second,class FROM sl_student WHERE SCORE NOT IN (SELECT MAX(SCORE) FROM sl_student group by class)GROUP

SQL Server溫故系列(5):SQL 查詢分組查詢 GROUP BY

1、GROUP BY 與聚合函式 2、GROUP BY 與 HAVING 3、GROUP BY 擴充套件分組 3.1、GROUP BY ROLLUP 3.2、GROUP BY CUBE 3.3、GROUP BY GROUPING SETS 4、GROUP BY 擴充套件函式 4.1、GROUPING

[mysql]SQL查詢存在A表但不存在B表的資料

select * from ti_road_node_code a where a.road_node_id not in ( s

MySQL】多表查詢分組求和、並對和排序、取top n

查漏補缺MySQL的相關知識 1. 有一個使用者資金流水錶(如上的sql程式碼),找出流水金額最多的前10個使用者: 2. 查詢分組後的最大值,最小值所在的整行記錄或者分組後的top n行的記錄。 3.TOP 1 4.TOP N

MYSQL基礎上機練習題(二)對資料指定列查詢、條件查詢查詢結果排序、聚集函式查詢分組統計查詢

實驗目標:1.掌握指定列或全部列查詢2.掌握按條件查詢3.掌握對查詢結果排序4.掌握使用聚集函式的查詢5.掌握分組統計查詢一、請完成書中實驗7.1,並完成以下問題。1.查詢所有學生的姓名及其出生年份回答以下問題:SQL語句請截圖① 觀察查詢的資料,若年齡不為空是否能求出出生年

sql語句分組查詢排序後取出前n條記錄

1.sql語句分組排序後取出前n條記錄 (SELECT * FROM ( SELECT "row_number" () OVER ( PARTITION BY mmsi ORDER BY orginal_in_draught DESC ) A

SQL 特殊查詢例項 分組、編號、排序、行號

在資料庫查詢操作的時候,經常會遇到一些特殊的資料提取,比如按某些條件分組後,在組內排序附加租序號等等。 不多說直接上SQL: 表 TableName{A,B,C,D} TableName A   B   C   D a   1   a1  b1 b   1  

mysql排序,同樣的sqlmysql 每次查詢結果順序不一致

簡單 查詢 排序。 mys ava res 分法 算法 ont   某天項目中寫了一句排序sql,但是發現每次執行的結果都不同,就是排序順序不一樣。 select * from table_tmp order by printStatus asc,dealTim

提高mysql千萬級大數據SQL查詢優化30條經驗

pro 字符串 插入數據 run 較差 存儲 同時 例程 鎖定 1.對查詢進行優化,應盡量避免全表掃描,首先應考慮在 where 及 order by 涉及的列上建立索引。 2.應盡量避免在 where 子句中對字段進行 null 值判斷,否則將導致引擎放棄使用索引而進

mysql-大量數據的sql查詢優化

not in red 固然 替換 其他 百分號 pro don 客戶 1、應盡量避免在 where 子句中使用!=或<>操作符,否則將引擎放棄使用索引而進行全表掃描。 2、對查詢進行優化,應盡量避免全表掃描,首先應考慮在 where 及 order by 涉