user表中有兩個a,一個b,一個c用戶(name),年齡分別爲5,6,7
select name,count(*) from usr group by name;
name count(*)
a 2
b 1
c 1
group by 字段 with rollup (可以根據某字段排序然後計算其他字段的和,平均數等)
select name,count(age) as age from usr group by name with rollup
name age
a 10
b 6
c 7
null 23(總和)
我們可以使用coalesce來設置一個取代null的名稱,coalesce
coalesce(a,b,c):a爲空則取b,b爲空則取c,c爲空則爲null,a不爲空則取a
select coalesce(name,'總數'),count(age) as age from usr group by name with rollup
name age
a 10
b 6
c 7
總數 23
連接查詢
外聯接:1->A左外連B無where條件取左表A所有
2->A左外連B有where條件(B is null) 取A除去B的部分
3->A右外連B無where條件取右表B所有
4->A右外連B有where條件(A is null) 取B除去A的部分
內連接:1->取A和B共有的部分
full outer join:1->無where條件取A和B的所有(相當於左外連和右外連接的結合取量表所有)2->有where條件(A is null OR B is null)取A,B所有除去A,B共有的部分(相當於A,B內連接的取反)
//獲取當前的日期和時間(2020-06-01 14:16:59)now()//獲取當前的日期(2020-06-01)curdate()//獲取當前的時間(14:16:59)curtime()//獲取時間的指定片段(unix可以是day,hour等,xxx指的是時間的字段)extract(unix from xxx)//格式化指定時間爲日期格式date(xxx)//格式換時間格式from_unixtime(xxx,'%y-%m-%d')//格式換時間格式date_format(xxx,'%y-%m-%d')//向日期添加指定的時間間隔 date_add(date,interval expre type)//向日期減去指定的時間間隔date_sub(xxx,interval expr type)//獲取兩個時間之間的差的天數datediff(xxx,xxx)
字符串拼接
//注意如果一個參數爲null,則返回nullconcat()//注意分隔符爲null則返回null,函數會忽略分隔符後面的null值concat_ws()分隔符可以是一個字符串也可以是一個參數
select concat_ws(',','11','22','33')==>11,22,33
select concat_ws(',','11','22',null)==>11,22group_cancat()//默認爲逗號分隔如需設置分隔符group_concat(字段 separator ';')
mysql> select * from aa;+------+------+| id| name |+------+------+|1|10||1|20||1|20||2|20||3|200||3|500|+------+------+
select id group_concat(name order by name desc) from aa group by id
+------+---------------------------------------+|1|20,20,10||2|20||3|500,200|+------+---------------------------------------+