今天小編給大家分享一下MySQL怎么按年/月/周/日/小時(shí)分組查詢、排序、limit及判空的相關(guān)知識點(diǎn),內(nèi)容詳細(xì),邏輯清晰,相信大部分人都還太了解這方面的知識,所以分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后有所收獲,下面我們一起來了解一下吧。
成都創(chuàng)新互聯(lián)公司主營鉛山網(wǎng)站建設(shè)的網(wǎng)絡(luò)公司,主營網(wǎng)站建設(shè)方案,重慶App定制開發(fā),鉛山h5成都小程序開發(fā)搭建,鉛山網(wǎng)站營銷推廣歡迎鉛山等地區(qū)企業(yè)咨詢
在DATE_FORMAT(create_time,'%Y%m%d')中設(shè)置需要分組的類型和格式,如下:
'%Y%m%d'表示:20221122
'%Y-%m-%d'表示:2022-11-22
可根據(jù)自己的需要設(shè)置,年月日都是如此
如下圖user表
id | name | age | birthday | gender | create_time |
1 | 張三 | 20 | 2000-01-01 | 男 | 2022-11-22 11:11:11 |
2 | 李四 | 21 | 2001-02-02 | 男 | 2022-11-19 00:00:00 |
3 | 王五 | 23 | 1999-05-06 | 女 | 2022-11-20 23:59:59 |
按日分組查詢并排序
SELECT DATE_FORMAT(create_time,'%Y-%m-%d') days,COUNT(id) FROM user WHERE create_time > "2022-11-11 00:00:00" AND create_time < "2022-12-01 00:00:00" GROUP BY days ORDER BY days DESC;
按周分組查詢
SELECT DATE_FORMAT(create_time,'%Y-%u') weeks,COUNT(id) FROM user GROUP BY weeks;
按月分組查詢
SELECT DATE_FORMAT(create_time,'%Y-%m') months,COUNT(id) FROM user GROUP BY months
按年分組查詢
SELECT DATE_FORMAT(create_time,'%Y') months,COUNT(id) FROM user GROUP BY years
按小時(shí)分組查詢
SELECT DATE_FORMAT(create_time,'%Y-%m-%d %H') hours,COUNT(id) FROM user WHERE create_time > "2022-11-11 00:00:00" AND create_time < "2022-12-01 00:00:00" GROUP BY hours;
DATE_FORMAT()需要傳入一個(gè)特定的占位符,mysql常用的占位符可參考下表:
占位符 | 說明 |
---|---|
%Y | 年(4位) |
%y | 年(2位) |
%M | 月(英文名,如January) |
%m | 月(數(shù)字,如01) |
%D | 日(英文名,如1st) |
%d | 日(數(shù)字,如01) |
%e | 日(數(shù)字,如1) |
%U | 一年中的第幾周,從0開始 ,周日是第一天 |
%u | 一年中的第幾周,從0開始,周一是第一天 |
%H | 時(shí),24小時(shí)制,例如15 |
%h | 時(shí),12小時(shí)制,例如01 |
%i | 分 |
%s | 秒 |
使用ORDER BY 字句排序,在其后面加所需字段
ASC(ascend): 升序
DESC(descend): 降序
ORDER BY 字句在SELECT語句的結(jié)尾
注意:
數(shù)據(jù)庫中默認(rèn)按照先后添加順序存儲(chǔ)數(shù)據(jù),在查詢時(shí),也按照添加順序遍歷顯示結(jié)果.因此當(dāng)我們需要一些特定的數(shù)據(jù)排列時(shí)就要使用到排序
根據(jù)上述用戶user表查詢:
#練習(xí)1:根據(jù)年齡降序(從大到小)排序
SELECT * FROM user ORDER BY age DESC;
#練習(xí)2:根據(jù)出生日期升序(從小到大)排序
SELECT * FROM user ORDER BY birthday ASC;
注意:
如果在ORDER BY 后面沒有顯示指明排序方式的話,則默認(rèn)按照升序排列排序,有WHERE 和 ORDER BY 同時(shí)出現(xiàn)的地方,一定要把WHERE放在FRON語句后面,ORDER BY 往后放
SELECT * FROM user WHERE age > 20 ORDER BY age DESC;
在查詢中,經(jīng)常要返回前幾條或者中間某幾行數(shù)據(jù)時(shí),用到limit
語法如下:
select * from table_name limit [offset,] rows
參數(shù)說明:
offset:指定第一個(gè)返回記錄行的偏移量(即從哪一行開始返回),注意:初始行的偏移量為0。
rows:返回具體行數(shù)。
總結(jié):如果limit后面是一個(gè)參數(shù),就是檢索前多少行。如果limit后面是2個(gè)參數(shù),就是從offset+1行開始,檢索rows行記錄。
舉例:
select * from table_name limit 10;//檢索前10行記錄 select * from table_name limit 5 ,10;//從第6行開始,檢索10行記錄,即:檢索記錄行 6-15
客戶端通過傳遞page(頁碼),pageSize(每頁顯示的條數(shù))兩個(gè)參數(shù)去分頁查詢數(shù)據(jù)庫表中的數(shù)據(jù),那我們知道MySql數(shù)據(jù)庫提供了分頁的函數(shù)limit m,n,但是該函數(shù)的用法和我們的需求不一樣,所以就需要我們根據(jù)實(shí)際情況去改寫適合我們自己的分頁語句,具體的分析如下:
比如:
查詢第1條到第10條的數(shù)據(jù)的sql是:select * from table limit 0,10; ->對應(yīng)我們的需求就是查詢第一頁的數(shù)據(jù):select * from table limit (1-1)*10,10;
查詢第10條到第20條的數(shù)據(jù)的sql是:select * from table limit 10,10; ->對應(yīng)我們的需求就是查詢第二頁的數(shù)據(jù):select * from table limit (2-1)*10,10;
查詢第20條到第30條的數(shù)據(jù)的sql是:select * from table limit 20,10; ->對應(yīng)我們的需求就是查詢第三頁的數(shù)據(jù):select * from table limit (3-1)*10,10;
總結(jié):
通過上面的分析,可以得出符合我們需求的分頁sql格式是:
select * from table limit (page-1)*pageSize,pageSize;
ifnull(a,b)函數(shù)解釋:
如果value1不是空,結(jié)果返回a
如果value1是空,結(jié)果返回b
如下表:分?jǐn)?shù)表score
id | Chinese | English | Physics |
1 | 99 | 98 | null |
2 | 88 | 99 | null |
1、 在統(tǒng)計(jì)數(shù)據(jù)時(shí)如果沒有值返回,給結(jié)果置為0
舉例:統(tǒng)計(jì)物理科目分?jǐn)?shù)總和時(shí),如果該列為null,返回0,如果不使用ifnull(),正常返回值為null
SELECT ifnull(SUM(Physics),0) FROM score;
2、在查詢數(shù)據(jù)需要計(jì)算遇到null值時(shí)
舉例:查詢id為1的學(xué)生的語文和物理的總分
錯(cuò)誤寫法(在數(shù)據(jù)庫沒有指定為空時(shí)的默認(rèn)值時(shí))
SELECT Chinese+Physics FROM score;
數(shù)據(jù)為null不能參與運(yùn)算,否則會(huì)直接報(bào)錯(cuò)。
正確寫法
SELECT ifnull(Chinese,0)+ifnull(Physics,0) FROM score;
還有就是使用SUM()等函數(shù),可以忽略計(jì)算中的空值。
SELECT SUM(Chinese,Physics) FROM score。
以上就是“MySQL怎么按年/月/周/日/小時(shí)分組查詢、排序、limit及判空”這篇文章的所有內(nèi)容,感謝各位的閱讀!相信大家閱讀完這篇文章都有很大的收獲,小編每天都會(huì)為大家更新不同的知識,如果還想學(xué)習(xí)更多的知識,請關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道。
網(wǎng)頁標(biāo)題:MySQL怎么按年/月/周/日/小時(shí)分組查詢、排序、limit及判空
當(dāng)前鏈接:http://www.rwnh.cn/article0/jeppoo.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供自適應(yīng)網(wǎng)站、網(wǎng)站收錄、網(wǎng)站建設(shè)、商城網(wǎng)站、響應(yīng)式網(wǎng)站、虛擬主機(jī)
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)