SQL高频面试题
行列转换可以通过CASE WHEN或GROUP BY实现,适用于统计不同维度的汇总结果。例如:
sql
SELECT
user_id,
MAX(CASE WHEN type = 'click' THEN cnt ELSE 0 END) AS click_cnt,
MAX(CASE WHEN type = 'pay' THEN cnt ELSE 0 END) AS pay_cnt
FROM user_action
GROUP BY user_id;
分组取TopN通常使用窗口函数ROW_NUMBER()或RANK()实现:
sql
SELECT * FROM (
SELECT
category,
sales,
ROW_NUMBER() OVER (PARTITION BY category ORDER BY sales DESC) AS rn
FROM product_sales
) t
WHERE rn <= 3;
连续登录或连续日期问题可以通过日期偏移和分组标记法解决:
sql
SELECT user_id, COUNT(*) AS continuous_days FROM (
SELECT
user_id,
login_date,
DATE_SUB(login_date, INTERVAL ROW_NUMBER() OVER (PARTITION BY user_id ORDER BY login_date) DAY) AS flag
FROM user_login
) t
GROUP BY user_id, flag
HAVING continuous_days >= 3;
去重与统计可以使用COUNT(DISTINCT)和GROUP BY:
sql
SELECT COUNT(DISTINCT user_id) AS uv FROM user_log WHERE date = '2025-12-25';
多表连接与子查询包括INNER JOIN和LEFT JOIN的使用场景:
sql
SELECT u.user_id, u.name, o.order_amount
FROM user u
LEFT JOIN `order` o ON u.user_id = o.user_id;
核心指标理解
基础业务指标包括UV、PV、转化率、留存率、复购率、GMV、客单价和LTV。
留存计算分为次日留存、7日留存和30日留存,公式为:
次日留存 = 当日新增用户且次日仍活跃用户数 / 当日新增用户数
转化率包括点击转化率和支付转化率:
点击转化率 = 点击用户数 / 曝光用户数
支付转化率 = 支付用户数 / 点击用户数
业务分析思路
数据波动分析框架包括确认数据真实性、拆分维度、对比同期和环比,并结合运营动作分析原因。
漏斗分析适用于转化路径优化,定位流失最大环节并给出优化方向。
用户分层可以通过RFM模型实现,用于精细化运营。
Python与工具相关
Pandas常用操作包括数据读取、缺失值处理、分组聚合和透视表:
python
import pandas as pd
df = pd.read_csv('data.csv')
df = df.dropna()
df.groupby('category')['sales'].sum()
数据可视化工具如Matplotlib和Seaborn可用于绘制折线图、柱状图、饼图和热力图。
统计学基础包括均值、中位数、标准差、正态分布和假设检验。