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排序,同樣的sql,mysql 每次查詢結果順序不一致
簡單 查詢 排序。 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 涉