柚子快報激活碼778899分享:數(shù)據(jù)庫 SQL 題目
柚子快報激活碼778899分享:數(shù)據(jù)庫 SQL 題目
排序和分組
排序使用函數(shù) order by默認(rèn)是升序(ASC),可以使用order by DESC(降序)排列 group by 列名,通過列名分組。 HAVING子句用于在應(yīng)用GROUP BY子句之后篩選分組的結(jié)果。 它通常包含聚合函數(shù),因為篩選條件是基于分組后的統(tǒng)計數(shù)據(jù)。 HAVING子句不能單獨(dú)使用,必須與GROUP BY子句一起使用。 WHERE與HAVING的區(qū)別: WHERE子句在分組之前對數(shù)據(jù)進(jìn)行篩選,而HAVING子句在數(shù)據(jù)分組之后進(jìn)行篩選。 WHERE子句不能包含聚合函數(shù),而HAVING子句可以并且常常包含聚合函數(shù)。 當(dāng)查詢中同時包含WHERE、GROUP BY和HAVING子句時,首先執(zhí)行WHERE子句來過濾記錄,然后執(zhí)行GROUP BY子句進(jìn)行分組,最后執(zhí)行HAVING子句來篩選分組后的結(jié)果
力扣1045:添加鏈接描述
思路
題目中給出兩個表一個用戶id跟買的產(chǎn)品id,另一個表是產(chǎn)品id,要求是我們篩選出買了所有產(chǎn)品的用戶id,我一開始的想法是現(xiàn)在產(chǎn)品表中統(tǒng)計出所有的產(chǎn)品數(shù)量,然后在第二個表中統(tǒng)計出用戶買的數(shù)量然后相等可以得出,但是沒有地方能讓這兩個表通過聚合函數(shù)查詢出來的值判斷是否相等,在我看了別人題解后恍然大悟,可以在Having子句中對我們group by分組后的進(jìn)行篩選,在這里可以使用子查詢?nèi)缓笈袛?/p>
select customer_id
from customer
group by customer_id
having count(distinct(product_key) ) = (select count(*) from Product)
聚合函數(shù)
聚合函數(shù)包括:AVG(),SUM(),COUNT(),MAX(),MIN()
力扣1211:力扣1211
思路
題目中需要求平均值個和一個比值,其中第一個平均值比較好計算,我們通過group by 分組后計算他的平均值,但是需要保留兩位小數(shù),我么通過round(number,小數(shù)位數(shù))來處理;求的第三列是一個占比的問題,一開始我想通過先查出<3的求出來單獨(dú)做一個表,然后鏈接去做,但是不能達(dá)到效果,查看題解后發(fā)現(xiàn)了解決辦法,題解中提供了SUM(if(rating<3,1,0)),他在聚合函數(shù)SUM中寫了一個條件表達(dá)式: if(rating<3,1,0):這是一個條件表達(dá)式,當(dāng) rating 小于 3 時,返回 1,否則返回 0,通過這個我們得到了<3的數(shù)量,然后與count(*)做比值即可;同時還出現(xiàn)了一個錯誤,就是使用group by分組時沒有去判斷空值的情況也會導(dǎo)致出錯,使用 having query_name is not null去除空值的情況
select q1.query_name ,
round(avg(rating/position),2)as quality,
round(sum(if(rating<3,1,0))/count(rating)*100,2)
as poor_query_percentage
from Queries as q1
group by q1.query_name
having query_name is not null;
之后我又發(fā)現(xiàn)了另一只求第三列的方法使用avg(rating<3)當(dāng)<3的時候返回一個1,最后求平均值時除以總的數(shù)量
select q1.query_name ,round(avg(rating/position),2)as quality,
round(avg(rating<3)*100,2)as poor_query_percentage
from Queries as q1
group by q1.query_name
having query_name is not null;
總結(jié):
使用聚合函數(shù)時可以在聚合函數(shù)中添加條件語句來進(jìn)行篩選達(dá)到所想的效果,同一個結(jié)果可以有不同的方式得到。使用round(number,3)來控制小數(shù)點(diǎn)的位數(shù)聚合函數(shù)中IF(rating>3,1,0)的含義時>3的時候返回1,否則返回0
索引
數(shù)據(jù)庫中索引是一種可以加快查詢的數(shù)據(jù)結(jié)構(gòu),一般主鍵是索引也可以自己添加索引:
alter table 表名
add index index_name(列名)
唯一索引(數(shù)據(jù)不重復(fù))
alter table xxx
add unique index index_name(列名)
索引是允許存在重復(fù)的,但是數(shù)據(jù)重復(fù)率越低,索引的效率越高 一個表中索引不是越多越好,因為當(dāng)我們在增刪改的時候會去維護(hù)索引,索引太多會增大系統(tǒng)資源開支。
連接
柚子快報激活碼778899分享:數(shù)據(jù)庫 SQL 題目
參考文章
本文內(nèi)容根據(jù)網(wǎng)絡(luò)資料整理,出于傳遞更多信息之目的,不代表金鑰匙跨境贊同其觀點(diǎn)和立場。
轉(zhuǎn)載請注明,如有侵權(quán),聯(lián)系刪除。