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

