
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) 【追问清单】
IS NULL检查数值型NULL。7) 【常见坑/雷区】