51mee - AI智能招聘平台Logo
模拟面试题目大全招聘中心会员专区

使用SQL进行数据清洗,请写一个SQL查询,从股票日数据表中(字段:代码、日期、开盘价、最高价、最低价、收盘价、成交量、成交额)计算每日的涨跌幅((收盘价-开盘价)/开盘价*100),并处理缺失值(如收盘价或开盘价为空则跳过)。

招商证券研究发展中心研究岗/研究助理岗难度:中等

答案

1) 【一句话结论】通过计算(收盘价-开盘价)/开盘价*100得到每日涨跌幅,并在WHERE子句过滤开盘价或收盘价为空的记录,实现数据清洗。

2) 【原理/概念讲解】涨跌幅是反映股票价格变动的核心指标,公式为(当日收盘价 - 当日开盘价)/ 当日开盘价 * 100%。数据清洗中,缺失值(如空值)会导致计算错误(如除以0或结果无效),需先过滤无效数据。比如,假设开盘价或收盘价为NULL的行属于无效数据,需通过WHERE条件排除,确保计算基于有效数据。

3) 【对比与适用场景】

方法定义特性使用场景注意点
过滤空值在WHERE子句排除包含NULL的行直接过滤无效数据,保留有效行计算基于有效数据的场景(如本题)需确保字段类型为数值型,空值判断准确

4) 【示例】
假设股票日数据表名为stock_daily,字段为code(代码)、date(日期)、open(开盘价)、close(收盘价)。SQL语句:

SELECT 
    code,
    date,
    ((close - open) / open * 100) AS 涨跌幅
FROM 
    stock_daily
WHERE 
    open IS NOT NULL AND close IS NOT NULL;

5) 【面试口播版答案】
面试官您好,计算每日涨跌幅的SQL查询需先处理缺失值,因为开盘价或收盘价为空会导致计算错误。公式是(收盘价-开盘价)/开盘价*100%,通过WHERE子句过滤开盘价或收盘价为NULL的记录。具体语句为:SELECT 代码, 日期, ((收盘价-开盘价)/开盘价*100) AS 涨跌幅 FROM 股票日数据表 WHERE 开盘价 IS NOT NULL AND 收盘价 IS NOT NULL; 这样就能得到有效交易日的涨跌幅。

6) 【追问清单】

  • 问:如果开盘价为0怎么办?
    答:需检查数据,排除开盘价为0的记录,避免除以0错误。
  • 问:是否需要按日期排序?
    答:本题计算每日涨跌幅,查询结果按默认日期升序排列即可。
  • 问:如何处理空字符串?
    答:空字符串需转换为数值型再判断,或用IS NULL检查数值型NULL。
  • 问:是否保留原始数据?
    答:若后续分析需原始数据,可保留,但本题只需计算并过滤缺失值。

7) 【常见坑/雷区】

  • 忽略开盘价为0导致除以0错误。
  • 使用空字符串代替NULL,导致判断错误。
  • 未过滤开盘价或收盘价为NULL的记录,结果包含无效数据。
  • 计算公式顺序错误(如遗漏乘以100或除以开盘价顺序)。
51mee.com致力于为招聘者提供最新、最全的招聘信息。AI智能解析岗位要求,聚合全网优质机会。
产品招聘中心面经会员专区简历解析Resume API
联系我们南京浅度求索科技有限公司admin@51mee.com
联系客服
51mee客服微信二维码 - 扫码添加客服获取帮助
© 2025 南京浅度求索科技有限公司. All rights reserved.
公安备案图标苏公网安备32010602012192号苏ICP备2025178433号-1