共計 3153 個字符,預計需要花費 8 分鐘才能閱讀完成。
今天丸趣 TV 小編給大家分享一下 MySQL 怎么按年 / 月 / 周 / 日 / 小時分組查詢、排序、limit 及判空的相關知識點,內容詳細,邏輯清晰,相信大部分人都還太了解這方面的知識,所以分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后有所收獲,下面我們一起來了解一下吧。
一、按年 / 月 / 周 / 日 / 小時分組查詢(日期時間類型為 date 或者 datetime)
在 DATE_FORMAT(create_time, %Y%m%d) 中設置需要分組的類型和格式,如下:
%Y%m%d 表示:20221122
%Y-%m-%d 表示:2022-11-22
可根據自己的需要設置,年月日都是如此
如下圖 user 表
idnameagebirthdaygendercreate_time1 張三 202000-01-01 男 2022-11-22 11:11:112 李四 212001-02-02 男 2022-11-19 00:00:003 王五 231999-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
按小時分組查詢
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() 需要傳入一個特定的占位符,mysql 常用的占位符可參考下表:
占位符說明 %Y 年 (4 位)%y 年 (2 位)%M 月(英文名,如 January)%m 月(數字,如 01)%D 日(英文名,如 1st)%d 日(數字,如 01)%e 日(數字,如 1)%U 一年中的第幾周,從 0 開始,周日是第一天 %u 一年中的第幾周,從 0 開始,周一是第一天 %H 時,24 小時制,例如 15%h 時,12 小時制,例如 01%i 分 %s 秒二、MySQL 排序 1. 排序規則
使用 ORDER BY 字句排序, 在其后面加所需字段
ASC(ascend): 升序
DESC(descend): 降序
ORDER BY 字句在 SELECT 語句的結尾
注意:
數據庫中默認按照先后添加順序存儲數據, 在查詢時, 也按照添加順序遍歷顯示結果. 因此當我們需要一些特定的數據排列時就要使用到排序
2. 單列排序
根據上述用戶 user 表查詢:
# 練習 1:根據年齡降序(從大到?。┡判?
SELECT * FROM user ORDER BY age DESC;
# 練習 2:根據出生日期升序(從小到大)排序
SELECT * FROM user ORDER BY birthday ASC;
注意:
如果在 ORDER BY 后面沒有顯示指明排序方式的話, 則默認按照升序排列排序,有 WHERE 和 ORDER BY 同時出現的地方, 一定要把 WHERE 放在 FRON 語句后面,ORDER BY 往后放
SELECT *
FROM user
WHERE age 20
ORDER BY age DESC;
三.limit 詳細用法 1、用于強制返回指定的記錄行數
在查詢中,經常要返回前幾條或者中間某幾行數據時,用到 limit
語法如下:
select * from table_name limit [offset,] rows
參數說明:
offset:指定第一個返回記錄行的偏移量(即從哪一行開始返回),注意:初始行的偏移量為 0。
rows:返回具體行數。
總結:如果 limit 后面是一個參數,就是檢索前多少行。如果 limit 后面是 2 個參數,就是從 offset+ 1 行開始,檢索 rows 行記錄。
舉例:
select * from table_name limit 10;// 檢索前 10 行記錄
select * from table_name limit 5 ,10;// 從第 6 行開始,檢索 10 行記錄,即:檢索記錄行 6-15
2、分頁
客戶端通過傳遞 page(頁碼),pageSize(每頁顯示的條數) 兩個參數去分頁查詢數據庫表中的數據,那我們知道 MySql 數據庫提供了分頁的函數 limit m,n,但是該函數的用法和我們的需求不一樣,所以就需要我們根據實際情況去改寫適合我們自己的分頁語句,具體的分析如下:
比如:
查詢第 1 條到第 10 條的數據的 sql 是:select * from table limit 0,10; – 對應我們的需求就是查詢第一頁的數據:select * from table limit (1-1)*10,10;
查詢第 10 條到第 20 條的數據的 sql 是:select * from table limit 10,10; – 對應我們的需求就是查詢第二頁的數據:select * from table limit (2-1)*10,10;
查詢第 20 條到第 30 條的數據的 sql 是:select * from table limit 20,10; – 對應我們的需求就是查詢第三頁的數據:select * from table limit (3-1)*10,10;
總結:
通過上面的分析,可以得出符合我們需求的分頁 sql 格式是:
select * from table limit (page-1)*pageSize,pageSize;
四.ifnull() 函數的使用 1、ifnull() 的語法
ifnull(a,b) 函數解釋:
如果 value1 不是空,結果返回 a
如果 value1 是空,結果返回 b
2、ifnull() 的使用
如下表:分數表 score
idChineseEnglishPhysics19998null28899null
1、 在統計數據時如果沒有值返回,給結果置為 0
舉例:統計物理科目分數總和時,如果該列為 null,返回 0,如果不使用 ifnull(), 正常返回值為 null
SELECT ifnull(SUM(Physics),0) FROM score;
2、在查詢數據需要計算遇到 null 值時
舉例:查詢 id 為 1 的學生的語文和物理的總分
錯誤寫法(在數據庫沒有指定為空時的默認值時)
SELECT Chinese+Physics FROM score;
數據為 null 不能參與運算,否則會直接報錯。
正確寫法
SELECT ifnull(Chinese,0)+ifnull(Physics,0) FROM score;
還有就是使用 SUM() 等函數,可以忽略計算中的空值。
SELECT SUM(Chinese,Physics) FROM score。
以上就是“MySQL 怎么按年 / 月 / 周 / 日 / 小時分組查詢、排序、limit 及判空”這篇文章的所有內容,感謝各位的閱讀!相信大家閱讀完這篇文章都有很大的收獲,丸趣 TV 小編每天都會為大家更新不同的知識,如果還想學習更多的知識,請關注丸趣 TV 行業資訊頻道。