2022-7-13
175. 组合两个表 left join on
176. 第二高的薪水 limit 1,1 ifnull((查询结果),null)
177. 第N高的薪水 limit N-1,1 order by '' desc
178. 分数排名 dense_rank() over() rank() over()
1873.计算特殊奖金 mod("",2) case when then else end
627. case when "" then else end
196. 多表查询
2022-7-15
1667.修复表中的名字 字符串操作 concat将字符串拼接 substr("string",index(从1开始),length(长度)) 字符串 大写upper() 小写lower()
1484.按照日期分组销售产品 group_concat 组拼接 去重计数 count(distinct 字段)
1527.患某种疾病的患者 模糊查询 like 'str%'
1965.丢失信息的雇员 union的使用(将两个查询进行合并)
1795.每个产品在不同商店的价格 union all(不去重)‘store1’as store
608.树节点 case when 变量= 值 then when then else end
2022-7-22 —— 合并
1581.进店却未进行过交易的顾客
知识点:子查询 select from where group by order by
1148.文章浏览
知识点:去重distinct 升序 asc或者是order by 的默认
197.上升的温度
知识点:MySQL中,日期的差值使用 timestampdiff(unit, start, end)——unit可以是年year,month,day
607.销售员
知识点:多个子查询——抽丝剥茧一点一点解决
———————计算函数———————————
1141.查训近30天活跃用户数
知识点: timestampdiff 函数解析
timestampdiff 函数解析:timestampdiff(unit, start, end) unit可以是年year,month,day
举例:
timestampdiff(day,'2019-06-27', '2019-07-27') = 30
timestampdiff(day,'2019-08-27', '2019-07-27') = -31
此时如果 查询近30天的用户数,按照
timestampdiff(day,activity_date , '2019-07-27') <= 30此时
是有bug的,因为从后面来的日期按照timestampdiff()计算也是小于30的
负数也小于30
1141:查训近30天活跃用户数
请写SQL查询出截至 2019-07-27(包含2019-07-27),近 30 天的每日活跃用户数(当天只要有一条活动记录,即为活跃用户)。
以 任意顺序 返回结果表。
select activity_date as day, count(distinct user_id) as active_users from Activity where timestampdiff(day,activity_date,'2019-07-27') < 30 and timestampdiff(day,activity_date,'2019-07-27') > 0 #为了把后面的日期屏蔽掉 group by activity_date
1693.每天的领导和合伙人
知识点:group by x,y 联合分组 根据字段x,y同时分组
1729. 求关注者的数量
知识点:常规知识
586.订单最多的客户
limit 0,1 一般与order by 结合使用,选取排序之后的第一条数据
511.游戏玩法分析
min(字段) 函数的使用
1890.2020年最后一次登录
知识点:如何判断一个日期的年份是‘2020’ 使用year(date_time) = '2020'来判断
1741.查找每个员工花费的总时间
sum函数的使用以及 联合分组 group by x,y