轉(zhuǎn)帖|使用教程|編輯:鮑佳佳|2020-12-14 11:06:27.690|閱讀 358 次
概述: 如果您想要每個類別的前5名,GROUP BY本身將無濟于事。 這并不意味著它無法完成。 實際上,在今天的博客中,我們將確切學習如何按組構(gòu)造前N個查詢。
# 界面/圖表報表/文檔/IDE等千款熱門軟控件火熱銷售中 >>
Navicat Premium是一個可連接多種數(shù)據(jù)庫的管理工具,它可以讓你以單一程序同時連接到MySQL、Oracle及PostgreSQL數(shù)據(jù)庫,讓管理不同類型的數(shù)據(jù)庫更加的方便。
前N個查詢是按降序獲取按值排序的前幾條記錄的查詢。 通常,這些是使用TOP或LIMIT子句完成的。 問題是,前N個結(jié)果集被限制為表中的最高值,而沒有任何分組。 GROUP BY子句可以幫助您解決此問題,但僅限于每個組的單項最高結(jié)果。 如果您想要每個類別的前5名,GROUP BY本身將無濟于事。 這并不意味著它無法完成。 實際上,在今天的博客中,我們將確切學習如何按組構(gòu)造前N個查詢。
前N個查詢基礎(chǔ)知識
為了更好地理解“前N個查詢”,讓我們編寫一個,從Sakila示例數(shù)據(jù)庫中選擇運行時間最長的前5部電影。 如果您不熟悉Sakila數(shù)據(jù)庫,它是一個MySQL數(shù)據(jù)庫,其中包含許多與虛構(gòu)的視頻租賃商店有關(guān)的表,視圖和查詢。 表包括actor、film、customer、rentals等。
按類別分組結(jié)果
GROUP BY子句將聚合函數(shù)應(yīng)用于一個或多個字段,以便數(shù)據(jù)與您指定的分組相關(guān)。 就分組結(jié)果而言,這是向前邁出的一步,但是GROUP BY仍然有兩個限制:
該查詢使用GROUP BY來顯示每個評級的最長播放電影:
請注意,我們不能包含電影標題,因為它既不是GROUP BY也不是聚合字段的一部分。
窗口函數(shù)速成課程
窗口函數(shù)(Window Functions)中的術(shù)語“窗口”是指函數(shù)在其上運行的行集,因為函數(shù)使用窗口中行的值來計算返回的值。窗口中的行集合被聚合為一個值。
若要在查詢中使用窗口函數(shù),必須使用OVER()子句定義窗口。它做兩件事:
一個查詢可以包括具有相同或不同窗口定義的多個窗口函數(shù)。
我們的查詢使用ROW_NUMBER()窗口函數(shù)。它為查詢的內(nèi)部窗口結(jié)果集中的每一行分配一個連續(xù)的整數(shù)。我們可以使用該值將每個評級的結(jié)果限制在前5個。這是通過將電影長度按降序排列來完成的。
總結(jié)
在今天的博客中,我們學習了如何在Navicat Premium中構(gòu)造一個查詢,以獲取每個類別的前5行。 最新的版本15增加了100多個增強功能,其中包括幾個新功能,可為您提供比以往更多的構(gòu)建,管理和維護數(shù)據(jù)庫的方式!
本站文章除注明轉(zhuǎn)載外,均為本站原創(chuàng)或翻譯。歡迎任何形式的轉(zhuǎn)載,但請務(wù)必注明出處、不得修改原文相關(guān)鏈接,如果存在內(nèi)容上的異議請郵件反饋至chenjj@fc6vip.cn
文章轉(zhuǎn)載自: