1. 聚合函数
1)sum、avg一般用于处理数值型;max、min和count可以处理任何类型
2)以上分组函数都可以忽略null值
3)可以和distinct搭配实现去重运算
-- 求所有员工的工资和
SELECT SUM(salary) FROM employees;
-- 求员工的平均工资
SELECT avg(salary) FROM employees;
-- 求员工的最低工资
SELECT min(salary) FROM employees;
-- 求员工的最高工资
SELECT max(salary) FROM employees;
-- 求有工资的员工数,若有人的工资为null,则不计入统计列
SELECT count(salary) FROM employees;
如果配合GROUP BY分组查询的话聚合函数对每组进行求和,最大值,最小值,平均值。
2.SQL语句的书写顺序:
1. select
2. from
3. where
4. group by
5. having
6. order by
7. limit
3.SQL语句的执行顺序:
1. from
2. where
3. group by
4. 聚合
5. having
6. select
7. distinct
8. order by
9. limit
4.日期函数补充
(1)例子.假设购物车东西全部销售,周几的营业额最高
SELECT SUM(cart.num * goods.price),DAYOFWEEK(cart.create_time) AS 星期
FROM cart,goods
WHERE cart.goods_no = goods.good_no
GROUP BY DATE_FORMAT( cart.create_time,'%Y-%m-%d')
ORDER BY SUM(cart.num * goods.price) DESC
LIMIT 0,1
DAYOFWEEK() ,DAYOFYEAR (),DAYOFMONTH()括号内的时间会计算出对应的周,年,月 ,【0-7{0被默认为一周第一天星期日}】
(2)
SELECT NOW() # 取日期和时间,当下时间
SELECT CURRENT_DATE()只取()日期
SELECT CURRENT_TIME ()只取()时间
SELECT DATE_FORMAT( NOW(),'%Y-%m-%e') # 提取 包含时间的日期 中的日期部分,不要时间部分
DATE_FORMAT 函数是用来将日期格式化(date,format)date是要格式化的日期,format是要格式化的形式,如上
%a 缩写星期名
%b 缩写月名
%c 月,数值
%D 带有英文前缀的月中的天
%d 月的天,数值(00-31)
%e 月的天,数值(0-31)
%f 微秒
%H 小时 (00-23)
%h 小时 (01-12)
%I 小时 (01-12)
%i 分钟,数值(00-59)
%j 年的天 (001-366)
%k 小时 (0-23)
%l 小时 (1-12)
%M 月名
%m 月,数值(00-12)
%p AM 或 PM
%r 时间,12-小时(hh:mm:ss AM 或 PM)
%S 秒(00-59)
%s 秒(00-59)
%T 时间, 24-小时 (hh:mm:ss)
%U 周 (00-53) 星期日是一周的第一天
%u 周 (00-53) 星期一是一周的第一天
%V 周 (01-53) 星期日是一周的第一天,与 %X 使用
%v 周 (01-53) 星期一是一周的第一天,与 %x 使用
%W 星期名
%w 周的天 (0=星期日, 6=星期六)
%X 年,其中的星期日是周的第一天,4 位,与 %V 使用
%x 年,其中的星期一是周的第一天,4 位,与 %v 使用
%Y 年,4 位
%y 年,2 位
*/
5.新式条件语句
SELECT account.name, cart.create_time
FROM account INNER JOIN cart
ON account.id=cart.account_id
WHERE account.name = '李四'
6.例题
求2023年3月12日前一周上架的商品
SELECT * FROM goods
WHERE DATE_FORMAT( create_time,'%Y-%m-%d') >= DATE_SUB('2023-03-12',INTERVAL 1 WEEK) # create_time里面的年月日时间大于等于2023-03-12向前推(减去)一周的具体时间
AND DATE_FORMAT( create_time,'%Y-%m-%d')<='2023-03-12'
create_time里面的年月日时间小于等于2023-03-12
DATEDIFF(date1,date2)用于计算两个时间之间的差距,DATA_SUB(时间,INTERVAL 1 DAY /MONTH /YAER /WEEK)从指定的时间里减去一定的时间,DATA_ADD(时间,INTERVAL 1 DAY /MONTH /YAER /WEEK)从指定的时间里增加一定的时间