SQL面试

在这里插入图片描述

问题1:创建表act_output,保存以下信息:区分不同活动,统计每个活动对应所有用户在报名参与活动之后产生的总订单金额、总订单数(一个用户只能参加一个活动)

create table act_output as 
select a.act_id,sum(ord_amt) as total_amount,count(ord_id) as total_order
from ord as a inner join act_usr as a
on o.user_id = a.user_id
where o.create_time > a.create_time
group by a.act_id

(2)加入活动开始后每天都会产生订单,计算每个活动截止当前(2019-08-12)平均每天产生的订单数,活动开始时间假设为用户最早报名时间

select a.act_id,count(ord_id)/datediff(day, min(a.create_time),'2019-08-12') as day_order
from ord as a inner join act_usr as a
on o.user_id = a.user_id
where o.create_time > a.create_time
group by a.act_id

在这里插入图片描述

(1)计算网站每天的访客数以及他们的平均操作次数;

select log_time,count(distinct user_id) as uv,round(count(opr_type)/count(distinct user_id),2) as avg_opr
from tracking_log
group by log_time

(2)统计每天符合A操作后B操作的操作模式的用户数,即要求AB相邻。
select * from tracking_log as a

create view x as 
(select user_id,opr_type,log_time,row_number() over(partition by log_time order by user_id) as flag

(3) 计算网络每日新增访客表

select distinct user_id,log_time from traking_log

在这里插入图片描述

select * from
(select *,row_number() over(order by employee_salary) as num from tabl)
where num <4

在这里插入图片描述

select student_id ,count(distinct class_id) as num
from class 
group by student_id 

在这里插入图片描述


select student_id,school_year,avg(gpa) as avg_gpa
from table1
group by student_id,school_year
having avg(gpa) >= 3.5

在这里插入图片描述

create view view2 as 
(select employee_id,department_id ,employee_salary,row_number() over (partition by department_id order by employee_salary desc) rank
from table2;
select *
from view2
where rank >= 3

在这里插入图片描述
求每组商品的浏览用户数(同组内同一用户只能算一次)

create view view3 as 
(select goods_id,sum(amount) as total_amount,
case when row_number() over(order by sum(amount) desc) <= 10 then 'top10'
when  row_number() over(order by sum(amount) desc) > 10  and  row_number() over(order by sum(amount) desc) <=20 then 'top10~top20' else '其他' end as gp
from order1
group by goods_id;
select v.gp,count(distinct uid) as uv
from pv as p
left join view3 as v
on p.goods_id = v.goods_id
group by v.gp

在这里插入图片描述

select *
from table2
where t1 > t3 and t1 < t4 and 
### 常见SQL面试问题及答案 #### 1. SQL基础概念理解 对于任何数据库操作而言,了解基本的概念至关重要。例如,在关系型数据库中,表(Table)是由列(Column)和行(Row)组成的二维结构;每一列表示实体的一个属性(Attribute),而每行则代表该实体的具体实例[^2]。 #### 2. 数据库设计原则 良好的数据库设计方案能够极大地提升系统的性能与可维护性。第三范式(3NF)是最常用的规范化形式之一,它要求消除冗余存储的数据,确保数据的一致性和准确性[^3]。 #### 3. 查询优化技术 为了提高查询效率,可以采用多种方法来优化SQL语句。这包括但不限于:合理创建索引(Indexing),利用EXPLAIN分析执行计划,以及通过JOIN替代子查询等方式减少I/O次数[^4]。 ```sql -- 创建索引来加速特定字段上的查找速度 CREATE INDEX idx_name ON table(column); ``` #### 4. 复杂查询构建能力 掌握如何编写复杂的多表连接(Multi-table JOINs), 子查询(Subqueries) 和窗口函数(Window Functions) 是高级SQL程序员必备的能力。这些特性允许更灵活高效地处理大规模关联数据集[^5]。 ```sql SELECT t1.id, AVG(t2.value) OVER (PARTITION BY t1.group_id ORDER BY t1.date DESC ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) AS avg_value FROM table1 t1 LEFT JOIN table2 t2 ON t1.key = t2.foreign_key; ``` #### 5. 错误处理机制 熟悉事务(Transaction Management) 的使用场景及其ACID特性(原子性Atomicity、一致性Consistency、隔离性Isolation、持久性Durability),并能正确运用BEGIN TRANSACTION/COMMIT/ROLLBACK命令来进行错误恢复[^6]。 --- ### 提高SQL技能的最佳实践建议 - **持续学习新功能**:随着版本更新不断涌现的新特性和改进点值得深入研究; - **参与开源项目贡献代码**:实际动手解决问题有助于积累经验; - **阅读高质量的技术博客文章和技术书籍**:获取更多实战经验和理论知识补充; - **练习真实案例中的复杂查询需求**:模拟工作环境下的挑战可以帮助更好地适应未来的工作任务[^7]。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值