MYSQL分组查询,查询语句补充

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)从指定的时间里增加一定的时间
 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值