最近寫sql語句的乙個總結

2021-08-07 01:17:49 字數 2101 閱讀 3936

1.在碰到求取連續的問題的時候,有2種思路,

(1)可以將表的資料錯位,就可以將前一條資料和後一條資料放在同一行,進行對比

(2)可以使用row_number(),比如在nba題目中,求取連續奪冠球隊的開始年份和結束年份

--本題求取連續獲得奪冠的nba球隊,以及開始時間,和結束時間

nba的題目中用到的函式max(),min(),over()

over()分析函式主要是用於計算基於組的某種聚合,和聚合函式的不同之處在於,聚合函式對於每組只返回一行, 

over()每組返回多行

語法over(partition by deptno order by salary)

按照部門進行分割槽,按照工資進行排序(order by是個預設的開窗函式)

開窗函式:與聚合函式一樣,開窗函式也是對行集組進行聚合計算,但是它不像普通聚合函式那樣每組只返回乙個值, 

開窗函式可以為每組返回多個值,因為開窗函式所執行聚合計算的行集組是視窗。在iso sql規定了這樣的函式為開窗函式 

,在oracle中則被稱為分析函式,而在db2中則被稱為olap函式。

2.在學生資訊查詢第一題中

--查詢 每個月 考試成績至少2門科目成績在 80分以上的學生資訊。

(1):犯了乙個錯誤,在我使用count()函式進行求取成績大於80的時候,使用了over()函式,結果集中就出現了 

,每個學生每次考試成績超過80的資訊,結果集重複了,而放棄over()使用group by

的時候,就沒有重複的結果集,over()分析函式,每組資料返回多行,而聚合函式每組只返回一行

右外連線:以右表為基表,以左表為輔表,右表獨有的,和左右表共有的

內連線:兩張表共有的資訊

3.在學生資訊查詢二題中

(1):主要用到in,考試在第一次和第三考試

4.在學生資訊查詢三題中

查詢每個老師帶了多少門課,那個老師代課最多。

知識點:

(1)計算每學期老師教了多少門課程,需要用到distinct關鍵字,去重複

(2)求出每一次考試,那個老師代課最多,需要用到row_number(),給count()函式加乙個偽列,倒敘排列,就可 

以取出代課最多的老師

(3)左外鏈結,需要注意的是關聯的條件不同的條件產生的結果集都是不同的

5.在學生資訊查詢四題中

第幾次考試 學生姓名 代課老師 科目1。。。總成績 平均分

(1)需求是將行轉列,用到case when 

但是以上只能把每一行的資料分別顯示在每一列,不能把所有的資料集中顯示在一列(根據固定分割槽),這個時候就 

需要用到聚合函式,根據分組將本列的資料進行求和

(2)還有一點需要注意的是:當你想少乙個group by的時候,可以對乙個隊sname進行求取最大值,結果還是他自 

己,但是去可以少一次group by

6.查詢2023年和2023年每家店鋪的銷售數量和銷售額

知識點(1):case when 分別求出2015和2016的銷售額和銷售量

7.求出15年每週銷售量最多的店鋪(分管理城市)自然周

問題:本題我開始寫的時候沒有使用row_number(),而是直接求每週每個店鋪的銷量,然後求取最大值,然而在求取最大值的時候有乙個問題就是,分組只能根據城市id和年內周進行分組,結果出來的資料沒有店鋪的id和店鋪的名字

如果這個時候去和店鋪資訊表進行關聯的時候,就會產生大量的結果集,

總結:在進行分割槽求取最大值的時候,建議用row_number(),====>再次記錄

8.--第三題

--查詢每個月有多少店鋪某一天銷售等於0(分管理城市)

--注釋:如果某家店鋪乙個月中多天銷售為0 則也是按一家店鋪計算

(1)笛卡爾操作的最大作用是把任意兩個不相關的表聯接起來.在本題中使用笛卡爾積是因為要獲取時間維度和每日 

銷售關聯,這樣可以把每一天的銷售都顯示出來,因為本題中沒有銷售的就沒有在每日銷售表中

(2)本題中的條件是每個月中多天銷售為0也是按1家店鋪計算,所以在最後進行還要進行一次case when把乙個店 

鋪多天銷售為0的改為1

9.----在乙個月中有多少家店鋪其中某連續兩天銷售額都為0 的店鋪

(1)本題重要的一點就是使用日期錯位把連續2天的銷售顯示到一行

最近寫的乙個小軟體

工具實現的功能很簡單,實現 查詢指定資料夾 及其下屬資料夾 的檔案中包含指定字串,或替換成其他字串的功能.介面如下 其實寫這個軟體的目的是因為 1.我正在看的乙個電子書 非 哈哈 中間都有大量網頁資訊廣告資訊的插入,非常不爽 2.日常操作經常想在一堆檔案中找到以前的某個語法的例子,卻苦於無現成工具....

乙個不會的SQL語句

12.有兩個表a 和b 均有key 和value 兩個字段,如果b 的key 在a 中也有,就把b 的value 換為a 中對應的value 這道題的sql 語句怎麼寫?update b set value select value from awhere a.key b.key where exi...

乙個神奇的SQL語句

題目是這樣的 分別往這兩張表中新增3條資料。查詢營業額最高商家的商品總價與營業額最低商家的商品總價差是多少 5分 create view vm2 as select price limit num as total money b.id from business b,goods g where b...