DAY1 高频SQL 50题部分(自用版)

高频 SQL 50 题(基础版)

*[注:题目来自力扣网]

1. 进店却未进行过交易的顾客

返回以 任何顺序 排序的结果表

思路:

✅ 以Visits作为左表连Transactions, 没有只浏览光顾的的transaction_id是null

代码:

SELECT 
	customer_id,count(customer_id) count_no_trans
FROM 
	Visits as v
LEFT JOIN Transactions as t
on 
	v.visit_id = t.visit_id
WHERE transaction_id IS NULL
GROUP BY customer_id;

运行结果:

在这里插入图片描述

2. 上升的温度

在这里插入图片描述

思路:

✅ DATEDIFF() 函数返回两个日期之间的天数。

DATEDIFF(date1,date2)   	 # date1 - date2

date1 和 date2 参数是合法的日期或日期/时间表达式。

注释:只有值的日期部分参与计算。

代码:

select 
    w1.id 
from 
    Weather as w1
join 
    Weather as w2   # 两表交叉关联 内连接JOIN 笛卡尔积现象
on datediff(w1.recordDate,w2.recordDate) = 1
    # DATEDIFF函数: DATEDIFF(date1, date2) #date1-date2
where 
    w1.Temperature > w2.Temperature;

运行结果:

在这里插入图片描述

3. 每台机器的进程平均运行时间

在这里插入图片描述

思路:

round( avg( IF ( activity_type = 'start',- timestamp,+ timestamp ) ) * 2
⁉️ SUM求和,当进程为end是加上该时间戳,start时减去该时间戳,由于是根据machine_id进行GROUP BY的,所以要*2,ROUND方法对结果位数进行限制

代码:

#快速解法
select
    machine_id,
    round(avg(if(activity_type='start', -timestamp, timestamp))*2, 3) processing_time 
from Activity 
group by machine_id

运行结果:

在这里插入图片描述

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值