Google SQL面试题:奇偶测量值求和查询未通过,求排查指导
SQL查询排查:Google传感器奇偶次测量值求和问题
问题背景
我在Datalemur平台学习SQL查询时,遇到一道Google传感器测量值的面试题。自己编写的查询能输出预期结果,但无法通过平台验收标准,请求帮忙排查潜在问题。
题目要求
该题与《Ace the Data Science Interview》SQL章节第28题一致,需从存储传感器多日多次测量数据的measurements表中,按日期分别计算当日奇数次(第1、3、5次等)和偶数次(第2、4、6次等)测量值的总和,并分两列展示结果。2023年4月15日起,题目及参考答案已修订。
表结构
| 列名 | 类型 |
|---|---|
| measurement_id | integer |
| measurement_value | decimal |
| measurement_time | datetime |
示例输入
| measurement_id | measurement_value | measurement_time |
|---|---|---|
| 131233 | 1109.51 | 07/10/2022 09:00:00 |
| 135211 | 1662.74 | 07/10/2022 11:00:00 |
| 523542 | 1246.24 | 07/10/2022 13:15:00 |
| 143562 | 1124.50 | 07/11/2022 15:00:00 |
| 346462 | 1234.14 | 07/11/2022 16:45:00 |
示例输出
| measurement_day | odd_sum | even_sum |
|---|---|---|
| 07/10/2022 00:00:00 | 2355.75 | 1662.74 |
| 07/11/2022 00:00:00 | 1124.50 | 1234.14 |
说明
2022年7月10日,奇数次测量值总和为2355.75,偶数次为1662.74;2022年7月11日仅有两次测量,奇数次总和1124.50,偶数次总和1234.14。
我的查询代码
WITH cte AS ( SELECT e.measurement_id, e.measurement_value, to_char(CAST(e.measurement_time AS DATE), 'MM/DD/YYYY HH24:MI:SS') AS sdt, ROW_NUMBER() OVER(PARTITION BY to_char(CAST(e.measurement_time AS DATE), 'MM/DD/YYYY HH24:MI:SS') ORDER BY e.measurement_id ) AS rnk FROM measurements e ), get_odd_data AS ( SELECT sdt, SUM(measurement_value) AS odd_values FROM cte WHERE mod(rnk, 2) != 0 GROUP BY sdt ORDER BY sdt ), get_even_data AS ( SELECT sdt, SUM(measurement_value) AS even_values FROM cte WHERE mod(rnk, 2) = 0 GROUP BY sdt ORDER BY sdt ) SELECT o.sdt, o.odd_values, e.even_values FROM get_odd_data o JOIN get_even_data e ON o.sdt = e.sdt ORDER BY o.sdt;
排查关键点
- 排序逻辑偏差:题目中奇偶次测量是按
measurement_time的先后顺序划分,但你的代码用measurement_id作为ROW_NUMBER()的排序依据。若measurement_id的生成顺序与测量时间不一致,会直接导致奇偶次分组错误。 - 数据丢失风险:使用
JOIN会过滤掉仅存在奇数次或仅存在偶数次测量的日期(比如某一天只有1次测量),这类日期的对应求和列应显示为NULL或0,但你的查询会直接丢弃这些数据,不符合题目要求。 - 输出列名不匹配:示例输出的日期列名为
measurement_day,但你的查询输出列名为sdt,可能不符合平台的输出格式要求。 - 日期处理不够严谨:将日期转换为字符串进行分区和分组,可能因SQL方言的格式化差异引发问题。建议直接用
DATE(measurement_time)获取日期类型进行分区,再统一格式化输出,避免字符串处理的潜在误差。
内容的提问来源于stack exchange,提问作者stackoverflowquestion54 develo
相关产品推荐
相关产品推荐

