SQL單表查詢的排序、聚合、分組操作
一、引言
今天主要講一講昨天剩下的排序、聚合、分組等單表查詢的一些操作.
二、單表查詢
1.排序查詢
知識(shí)點(diǎn):
排序查詢關(guān)鍵字: order by
排序查詢基礎(chǔ)格式: select 字段名 from 表名 order by 排序字段名 asc|desc;
asc : 升序(默認(rèn)) desc: 降序
進(jìn)階格式: select 字段名 from 表名 order by 排序字段1名 asc|desc , 排序字段2名 asc|desc;
注意: 如果order by后跟多個(gè)排序字段,先按照前面的字段排序,如果有相同值的情況再按照后面的排序規(guī)則排序
-- 示例1:查詢所有商品,并按照評(píng)分從高到低進(jìn)行排序
SELECT * FROM products ORDER BY score DESC;
-- 示例2:查詢所有商品,先按照評(píng)分從高到低進(jìn)行排序,評(píng)分相同的按照價(jià)格從低到高排序 SELECT * FROM products ORDER BY score DESC, price;
2.聚合函數(shù)
知識(shí)點(diǎn):
聚合函數(shù): 又叫統(tǒng)計(jì)函數(shù),也叫分組函數(shù)
常用聚合函數(shù): sum( ) count( ) avg( ) max( ) min( )
聚合查詢基礎(chǔ)格式: select 聚合函數(shù)(字段名) from 表名;
注意: 此處沒(méi)有分組默認(rèn)整個(gè)表就是一個(gè)大的分組
注意: 聚合函數(shù)(字段名)會(huì)自動(dòng)忽略null值,以后統(tǒng)計(jì)個(gè)數(shù)一般用count(*)統(tǒng)計(jì)因?yàn)樗粫?huì)忽略null值
示例:
# 注意: 別名不建議用中文,以下僅僅為了演示
-- 示例1:統(tǒng)計(jì)當(dāng)前商品一共有多少件
SELECT count(id) FROM products;
SELECT count(*) FROM products;
-- 示例2:對(duì)商品評(píng)分列進(jìn)行計(jì)數(shù)、求最大、求最小、求和、求平均
SELECT
COUNT(score) AS cnt,
MAX(score) AS max_score,
MIN(score) AS min_score,
SUM(score) AS total_score,
AVG(score) AS avg_score
FROM products;
-- 示例3:統(tǒng)計(jì)所有非自營(yíng)商品評(píng)分的平均值
SELECT
is_self,
AVG(score)
FROM
products
WHERE
is_self = '非自營(yíng)';3.分組查詢
分組查詢關(guān)鍵字: group by
分組查詢基礎(chǔ)格式: select 分組字段名,聚合函數(shù)(字段名) from 表名 group by 分組字段名;
注意: select后的字段名要么在group by后面出現(xiàn)過(guò),要么寫(xiě)到聚合函數(shù)中,否則報(bào)錯(cuò).
分組查詢進(jìn)階格式: select 分組字段名,聚合函數(shù)(字段名) from 表名 [where 非聚合條件] group by 分組字段名 [having 聚合條件];
where和having的區(qū)別?
書(shū)寫(xiě)順序: where在group by 前,having在group by后
執(zhí)行順序: where在分組前,having在分組后
分組函數(shù): where后不能跟聚合條件,只能跟非聚合條件,having后可以使用聚合條件,也可以使用非聚合條件(不建議)
應(yīng)用場(chǎng)景: 建議大多數(shù)過(guò)濾數(shù)據(jù)都采用where,只有當(dāng)遇到聚合條件的時(shí)候再使用having
使用別名: where后不能使用別名,having后可以使用別名
-- 示例1:統(tǒng)計(jì)每個(gè)分類的商品數(shù)量
SELECT
category_id,
-- ② 再聚合:對(duì)每一組的id進(jìn)行count計(jì)數(shù)
COUNT(id) AS cnt
FROM products
-- ① 先分組:按照category_id進(jìn)行分組
GROUP BY category_id;
-- 示例2:統(tǒng)計(jì)每個(gè)分類中自營(yíng)和非自營(yíng)商品的數(shù)量
SELECT
category_id,
is_self,
COUNT(id) AS cnt
FROM products
GROUP BY category_id, is_self;
-- 示例3:統(tǒng)計(jì)每個(gè)分類商品的平均價(jià)格,并篩選出平均價(jià)格低于1000的分類
SELECT category_id,
-- 再聚合
AVG(price)
FROM products
-- 先分組
GROUP BY category_id
-- 對(duì)分組聚合的結(jié)果進(jìn)行篩選
HAVING AVG(price) < 1000;4.limit查詢
知識(shí)點(diǎn):
分頁(yè)查詢關(guān)鍵字: limit
分頁(yè)查詢基礎(chǔ)格式: select 字段名 from 表名 limit x,y;
x: 起始索引,默認(rèn)從0開(kāi)始 x = (頁(yè)數(shù)-1)*y
y: 本次查詢的條數(shù)
注意: limit能完成topN需求,但是不能考慮到并列情況,此問(wèn)題可以使用后期學(xué)習(xí)的開(kāi)窗函數(shù)解決
示例:
- 示例1:獲取所有商品中,價(jià)格最高的商品信息
SELECT
*
FROM products
ORDER BY price DESC
LIMIT 1; -- LIMIT 0, 1;
-- 示例2:將商品數(shù)據(jù)按照價(jià)格從低到高排序,然后獲取第2頁(yè)內(nèi)容(每頁(yè)3條)
SELECT
*
FROM products
ORDER BY price
LIMIT 3, 3;
-- 示例3:當(dāng)分頁(yè)展示的數(shù)據(jù)不存在時(shí),不報(bào)錯(cuò),只不過(guò)查詢不到任何數(shù)據(jù)
SELECT * FROM products LIMIT 20, 10;5.SQL順序
書(shū)寫(xiě)順序: SELECT -> DISTINCT -> 聚合函數(shù) -> FROM -> WHERE -> GROUP BY -> HAVING -> ORDER BY -> LIMIT
執(zhí)行順序: FROM -> WHERE -> GROUP BY -> 聚合函數(shù) -> HAVING -> SELECT -> DISTINCT -> ORDER BY -> LIMIT
大家記住最后這個(gè)執(zhí)行順序就好,前面的各種格式都是根據(jù)這個(gè)來(lái)的.
三、結(jié)語(yǔ)
今天就先講這么多吧,下次給大家講用python操作MySql.
到此這篇關(guān)于SQL單表查詢?nèi)ヂ裕号判蚓酆戏纸M的文章就介紹到這了,更多相關(guān)sql單表查詢內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
SQLMap 參數(shù)--risk 與 --level 深度解析
SQLMap 作為最強(qiáng)大的 SQL 注入自動(dòng)化工具,其 --risk 和 --level 參數(shù)是控制測(cè)試深度和廣度的關(guān)鍵選項(xiàng),下面我將從原理到實(shí)踐全面解析這兩個(gè)參數(shù),感興趣的朋友一起看看吧2025-07-07
sql時(shí)間段切分實(shí)現(xiàn)每隔x分鐘出一份高速門(mén)架車流量
本文主要介紹了sql時(shí)間段切分實(shí)現(xiàn)每隔x分鐘出一份高速門(mén)架車流量,文中通過(guò)示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-02-02
sql語(yǔ)句之?dāng)?shù)據(jù)操作介紹
表中數(shù)據(jù)的變化牽一發(fā)而動(dòng)全身,會(huì)同時(shí)導(dǎo)致到索引中數(shù)據(jù)的變化。因此如果查詢語(yǔ)句不需要索引,就應(yīng)該刪除無(wú)用的索引以提高效率。2013-03-03
SQL Server 不存在或訪問(wèn)被拒絕(轉(zhuǎn))
在使用 SQL Server 的過(guò)程中,用戶遇到最多的問(wèn)題莫過(guò)于連接失敗了。一般而言,有兩種連接SQL Server 的方式,一是利用 SQL Server 自帶的客戶端工具2009-06-06
SQL Server 數(shù)據(jù)庫(kù)管理常用的SQL和T-SQL語(yǔ)句
SQL Server 數(shù)據(jù)庫(kù)管理常用的SQL和T-SQL語(yǔ)句...2006-08-08
分頁(yè)存儲(chǔ)過(guò)程(用存儲(chǔ)過(guò)程實(shí)現(xiàn)數(shù)據(jù)庫(kù)的分頁(yè)代碼)
用存儲(chǔ)過(guò)程實(shí)現(xiàn)數(shù)據(jù)庫(kù)的分頁(yè)代碼,加快頁(yè)面執(zhí)行速度。具體的大家可以測(cè)試下。2010-06-06

