MySQL資料庫筆記之 找出連續出現N次的內容

2021-10-05 15:23:22 字數 1706 閱讀 1789

【題目】

下面是學生的成績表(表名score,列名:學號、成績),使用sql查詢所有至少連續出現3次的成績。

例如,「成績」這一列裡84是連續出現3次的成績。

【解題思路】

1.什麼是連續出現3次?

假設「學號」是按順序排列的(如果不是,可以使用增加一列,讓學號是按序號順序排列的),所以每一學號與上一學號相差1。例如下圖的3個學號是連續學號,他們之間的關係是:

某一學號(0002)=下一位的學號(0003)-1

下一位學號(0003)=下下位學號(0004)-1

2.如果這3個連續學號的成績相等,就是題目要求的「至少連續出現3次的成績」。

3.利用「自連線(自身連線)「的思路

自連線(自身連線)的本質是把一張表複製出多張一模一樣的表來使用。sql語法:

select 列明 

from 表名 as 別名1

,表名 as 別名2

;

步驟1)將成績表(score)複製3分,分別命名為a、b、c

select

*from score as a,

score as b,

score as c;

步驟2)我們需要找到這3個表中3個連續的學號,這個條件如下

a.學號 = b.學號-1 and b.學號 = c.學號-1

步驟3)還要讓這3個學號連續的人「成績相等」,這個條件如下

a.成績 = b.成績 and b.成績 = c.成績

將步驟2和步驟3的條件合併起來就是下面sql裡的where字句:

select

*from score as a,

score as b,

score as c;

where a.學號 = b.學號 -

1and b.學號 = c.學號 -

1and a.成績 = b.成績

and b.成績 = c.成績;

步驟4)前面步驟已經將連續3人相等的成績找出,現在用distinct去掉自連線產生的重複數。最終sql如下:

select

distinct a.成績 as 最終答案

from score as a,

score as b,

score as c;

where a.學號 = b.學號 -

1and b.學號 = c.學號 -

1and a.成績 = b.成績

and b.成績 = c.成績;

本題考點】

• 本題考察的是連續出現,會有同學忽略「連續」二字

• 考察對自關聯的靈活應用

• 從題目連續3次成績相等,判斷出「成績相等」和「學號連續」這2個條件。考察構建「連續學號成績相等」的思維構建能力

【舉一反三】

遇到類似「連續出n次的問題」可以回想本題的解答思路,如:查詢至少連續3天沒有出勤的員工。

【問題與思考】

如果連續100次呢,自連線的方法還可以嗎?有沒有其它方法呢?

mysql資料庫筆記

資料庫集群的優點 1.提高可用性 2.提高效能 mysql複製 搭建方便,網際網路用的最多的方案 讀寫分離 寫操作放在主庫,讀操作放在從庫。主庫資料如何複製到從庫?當使用者進行修改資料庫資料操作的時候 1.主庫傳送乙個event事件,放在乙個二進位制檔案mysql s binlog中 2.產生執行緒...

MySQL資料庫之資料庫操作

建立資料庫時指定儲存的字元編碼 如果不指定編碼,資料庫預設使用安裝資料庫時指定的編碼 mysql create database emp charset gbk query ok,1 row affected 0.00 sec 建立資料庫 mysql create database stu quer...

mysql資料庫看屬性 MySQL資料庫之列屬性

列屬性 是否為空 是否為空 null 表示字段值可以為null not null字段值不能為空 預設值預設值 如果乙個字段沒有插入值,可以預設插入乙個指定的值 default 關鍵字用來插入預設值 mysql create table stu19 name varchar 20 not null d...