日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

sql datetime比较大小_SQL做题小技巧

發布時間:2023/12/15 数据库 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 sql datetime比较大小_SQL做题小技巧 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

數據分析必學必會當屬SQL取數,畢竟要分析首先需要有數嘛。

sql的語法教程往上一搜就有很多,本文主要將介紹幾個sql小技巧,靈活用上技能做對大部分的筆試題。

由于很多筆試是在牛客網上完成的,所以本文主要是用sqlite3的語法(實際上不同sql的區別主要只是在日期函數為主等函數上的差異)。

1.?with as 的使用

??? with as主要是為了代碼簡潔美觀,易讀易懂。主要用于創建臨時表,便于此后的查詢。

? ? 比如現在有個表是用戶消費表trade_tb,字段有user_id, trade_time, amount, 現在想統計找出哪一個用戶的消費金額最高,并輸出其消費金額。

? ? 如果不用with as創建臨時表,sql如下:

select user_id, max(total_amount) from ( select user_id, sum(amount) as total_amount from trade_tb group by user_id)??b-- 或者select user_id, sum(amount) as total_amountfrom trade_tbgroup by user_idorder by sum(amount) desclimit 1

上述寫法可能在其他sql中不能運行,但在sqlite3中可以。一般來說,可能會通過下面的sql查詢得到。

select?user_id,?total_amountfrom ( select user_id, sum(amount) as total_amount from trade_tb group by user_id) aorder?by?total_amount desclimit?1;

由于中間的代碼其實就是計算每個用戶的總金額,可以提取成臨時表,

with total_amount_tb as( select user_id, sum(amount) as total_amount from trade_tb group by user_id)select?user_id,?total_amountfrom?total_amount_tb?order by total_amount desclimit 1;

with as 結構主要在代碼涉及到多個臨時表或者多重子查詢時使用。【沒有想到比較合適的例子,下次再補充】

2.?條件語句的使用

在sqlite3中,條件語句一般通過case when實現,在新版本的sqlite3中也有iif函數實現,不過筆試的平臺一般版本沒這么新,不支持iif函數。

假如現在有學生期末成績表score_tb,字段為stu_id, course, score,假設每個學生每門課僅有一次考試成績。現在想取出每個學生的語文、數學、英語考試成績。

select stu_id, sum(case course when '語文' then score else null end) as 語文成績, max(case course when '數學' then score else null end) as 數學成績, avg(case course when '英語' then score else null end) as 英語成績from score_tbgroup by stu_id;

這里,由于限制了每個學生在每門課上至多有一次成績,所以用上聚合函數sum()/max()/min()/avg()的結果都是一致的。

3.?窗口函數的使用

窗口函數一般可以為排序類的函數rank()/dense_rank()/row_number(),也可以為sum()/avg()等聚合函數。

一般的筆試題目可以通過使用排序類的函數來簡化實現。

查詢消費總額第3的用戶:

with total_amount_tb as( select user_id, sum(amount) as total_amount from trade_tb group by user_id),total_amount_rank_tb as( select user_id, total_amount, rank() over (order by total_amount desc) as rnk from total_amount_tb)select user_id, total_amountfrom total_amount_rank_tbwhere rnk = 3;

取出每門成績前2的學生及其對應的成績:

with score_rank_tb as( select stu_id, course, score, rank() over (partition by course order by score desc) rnk from score_tb)select course, score, stu_id, rnkfrom score_rank_tbwhere rnk <= 2order?by?course

另外,注意區分rank()/dense_rank()/row_number()的區別:

select stu_id, course, score, rank() over (partition by course order by score desc) rnk, dense_rank() over (partition by course order by score desc) dense_rnk, row_number() over (partition by course order by score desc) row_numfrom score_tb2

也就是可以看到,對于成績相同的排序,rank()和dense_rank()取的是相同的名次,但是對于下一個成績,rank()是累加前面的總人數得到下一個名次,而dense_rank()是累加前面的數字個數得到的下一個名次,而row_number()則表示行數,根據排序的結果給每一行標注行號。

4. 日期時間函數的使用

sql的題目有時會出現一些需要通過日期函數表達的,這時候就會出現很多問題,因為不同的sql時間函數存在一些差異,特別是sqlite3的日期函數跟其他sql差別比較大,所以為了做好筆試題,一般還得提前把日期函數復習一遍。

  • 從字符串生成日期

select datetime('2020-01-01 00:12:34'), date('2020-01-01 00:12:34'), time('2020-01-01 00:12:34');

  • 從unix時間戳生成日期

select datetime(0,'unixepoch'), date(0,'unixepoch'), time(0,'unixepoch');

select datetime(0,'unixepoch','utc'), date(0,'unixepoch','utc'), time(0,'unixepoch','utc');--?可以看出這里假設0的我們當地的時間戳,轉成日期之后,再轉換成utc的時間。

select datetime(0,'unixepoch','localtime'), date(0,'unixepoch','localtime'), time(0,'unixepoch','localtime');--?由于有localtime的轉換,所以這里0假設的是utc的時間。

  • 從日期轉換成其他形式的值

strftime(format, timestring)實際上就是將日期轉換成其他表示形式。

select strftime('%Y-%m-%d %H:%M:%S','2020-01-02 04:15:36') as 日期時間, strftime('%f','2020-01-02 04:15:36') as 帶小數點的秒, strftime('%j','2020-01-02 04:15:36') as 一年第幾天, strftime('%J','2020-01-02 04:15:36') as 從JulianDay至今天數,???????strftime('%s','2020-01-02?04:15:36')?as?從19700101至今秒數;

  • 日期加減

select datetime('now') as 當前, datetime('now','start of month') as 月初, datetime('now','start of month','+1 month','-1 day') as 月底, datetime('now', '+20 days') as 二十天后, datetime('now','+50 hours') as 五十小時后, datetime('now', 'start of year') as 年初, datetime('now', 'start of day') as 今天起始

掌握這些小技巧其實筆試題就能做大部分啦~

創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎

總結

以上是生活随笔為你收集整理的sql datetime比较大小_SQL做题小技巧的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 国产福利91 | 在线观看jizz | 日本一区二区三区四区视频 | chinese精品自拍hd | 日本中文字幕在线不卡 | 亚州av成人 | 91久精品| 日韩激情一区二区 | 毛片网站免费在线观看 | 亚洲第一大综合区 | 日韩欧美色 | 精品人妻无码一区二区性色 | 美女娇喘 | 亚洲综合图 | 娇小的粉嫩xxx极品 国产精品人人爽人人爽 | 国产午夜精品无码一区二区 | 人人妻人人澡人人爽欧美一区双 | 网红av在线 | 手机看片久久久 | 国产激情精品一区二区三区 | 野花社区视频在线观看 | 久久久久久九九九九九 | 91人妻一区二区 | 久久99在线 | 国产成人精品一区二三区四区五区 | 台湾chinesehdxxxx少妇 | 国产乱子伦农村叉叉叉 | 国产区一区 | 亚洲国产成人精品久久久 | 国产91沙发系列 | 久久亚洲精精品中文字幕早川悠里 | 国产自产21区 | 欧美videos另类精品 | 男女啊啊啊视频 | 久久丫丫 | av久久久| 日本a级大片 | 伊人影视久久 | 自拍欧美日韩 | 久久韩国| 亚洲v欧美v另类v综合v日韩v | 精品久久无码视频 | 亚洲精品在 | 美日韩一区 | 午夜在线看 | 欧美精品aaa | 日韩亚洲欧美一区二区三区 | 91蜜桃臀久久一区二区 | 校园春色欧美 | 国产91在线播放九色 | 蜜桃一区二区 | 日韩亚洲欧美一区二区三区 | 亚洲av无码久久精品色欲 | 二区三区偷拍浴室洗澡视频 | 另类欧美尿交 | 东北少妇露脸无套对白 | 疯狂做爰的爽文多肉小说王爷 | 亚洲精品视频在线观看免费 | 亚洲av永久无码精品 | 在线一区不卡 | 中文二区 | 中日韩精品视频 | 国产96在线 | 亚洲 | 欧美日韩在线一区 | 久久福利一区 | 爱吃波客今天最新视频 | 狠狠91 | 欧美爱爱网址 | 国产一区二区三区视频免费在线观看 | 午夜快播 | 在线免费黄色 | 福利小视频 | 成年人三级网站 | 久草免费资源 | 女的高潮流时喷水图片大全 | 涩涩精品 | 在线观看黄色的网站 | 国产视频不卡一区 | 少妇特黄a一区二区三区88av | 成人在线视频免费播放 | 少妇名器的沉沦 | 中文字幕在线观看一区二区 | 福利在线免费视频 | 二区视频在线观看 | 成人看 | 国产极品美女在线 | 欧美高清视频在线观看 | 福利视频在线导航 | 亚洲国产日韩a在线播放性色 | 粗大黑人巨茎大战欧美成人免费看 | 亚洲不卡在线 | 国产精品久久久久久久久久东京 | 久久精品国产亚洲AV高清综合 | 一区二区小视频 | 相亲对象是问题学生在线观看 | 精品一区免费 | www.污在线观看 | 91视频麻豆 | 特级做a爰片毛片免费69 |