mysql程式題 MySQL經典程式設計問題

2021-10-17 16:52:28 字數 2362 閱讀 4907

星期數的問題

1 計算日期是週幾

這個問題看似很簡單,可以用mysql內建函式來計算

(1) weekday(date)其返回值是0-6,0代表monday, 6代表sunday;

(2) dayofweek(date)其返回值是1-7,但是它更不好理解,1代表的是sunday, 6代表的saturday;

(3) dayname(date)其返回值直接是具體的名詞,monday, tuesday...

以上三種方法都能夠根據日期計算週幾,但是都有一定的侷限,相對weekday()最符合中國人的習慣。

我們還有另外乙個方便的計算方法,如我們知道確切的某天是週幾,如:2000-01-03是周一,那麼我就可以用下列方式計算某個日期屬於週幾了

select (datediff(date,'2000-01-03')+1)%7,結果為1就是周一,結果為2就是周二,結果為7就是週日

select (datediff('2017-12-22','2000-01-03')+1)%7 = 5 則 2017-12-22 是周五,我們可以取任意為周一的日期作為參照基數來計算,非常符合中國人的思維習慣。

2 按周分組

這個問題如果使用系統函式week(date),當乙個周誇年時week會將乙個周拆分為兩個周統計,具體情況如下:

建立測試數:

create table `sales` (

`id` int(11) not null auto_increment,

`date` datetime not null,

`cost` int(10) unsigned not null,

primary key (`id`)

) engine=innodb auto_increment=9 default charset=utf8;

-- records of sales

insert into `sales` values ('8', '2017-01-01 00:00:00', '100');

insert into `sales` values ('1', '2017-11-30 00:00:00', '100');

insert into `sales` values ('2', '2017-12-01 00:00:00', '100');

insert into `sales` values ('3', '2017-12-02 00:00:00', '100');

insert into `sales` values ('4', '2017-12-31 00:00:00', '100');

insert into `sales` values ('5', '2018-01-01 00:00:00', '100');

insert into `sales` values ('6', '2018-01-02 00:00:00', '100');

insert into `sales` values ('7', '2018-01-10 00:00:00', '100');

使用week函式按周獲取每週的cost

week 函式計算的結果是把 2017-12-31,2018-01-01,2018-01-02算作一周,而且是算作2023年最後一周,實際應用中我們把2018-01-01 ~ 2018-01-07視作一周, 2017-12-25 ~ 2017-12-31視作一周,所以week函式明顯不符合我們實際使用需求。

我們介紹一種類似星期幾計算的方法,同樣使用日期參照法,2017-01-02為周一,方便計算我們使用它作為參照

這樣不但可以計算出周,還可以計算出每週的開始與結束時間。

mysql 經典問題 mysql經典排名問題

問題 編寫乙個 sql 查詢來實現評分排名。如果兩個分數相同,則兩個分數排名 rank 相同。評分表ratings 方法一 不運用dense rank 運用子查詢 解決這一問題可以分為兩個步驟 步驟一 降序排列分數 select a.rating as rating from ratings a o...

mysql經典應用架構 MySQL經典架構

mysql主從複製 此種架構,一般初創企業比較常用,也便於後面步步的擴充套件 此架構特點 1 成本低,佈署快速 方便 2 讀寫分離 3 還能通過及時增加從庫來減少讀庫壓力 4 主庫單點故障 5 資料一致性問題 同步延遲造成 mysql mmm架構 通過 drbd 基於 block 塊的複製模式,快速...

mysql 經典操作 mysql常用經典操作

it168 伺服器學院 連線伺服器 mysql u cnscn h 192.168.0.1 d dbname p 3306 protocol name the protocol of connection tcp,socket,pipe,memory s,socket name 連線所用的套接字檔案...