You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

从SQLite3查询Top3最快平均时间时如何忽略NULL/None值?

解决方法

你的问题主要出在三个地方:

  • SELECT语句里误用了averageTime IS NOT NULL,这会返回布尔值(1或0),而不是实际的平均时间数值
  • 没有过滤掉averageTime为NULL的记录,SQL默认排序时NULL会排在最前面,所以LIMIT 3优先选中了这些无数据的学生
  • 循环内的print语句没有缩进,只会打印最后一条查询结果

修正后的代码如下:

print("\n\tTop 3 fastest average times:\n")
print("%-3s%10s%15s%15s%15s" % ("Student ID", "Name", "Surname", "Year group", "Average time"))

# 修正SQL查询:过滤NULL记录,正确选择averageTime字段,按时间升序排序
for row in c.execute('SELECT studentID, firstName, surname, yearGroup, averageTime FROM Students WHERE averageTime IS NOT NULL ORDER BY averageTime LIMIT 3'):
    studentID, firstName, surname, yearGroup, averageTime = row
    print("%-3s %15s %15s %15s %15s" % (studentID, firstName, surname, yearGroup, averageTime))

关键修正点说明:

  1. 添加WHERE条件:WHERE averageTime IS NOT NULL直接排除了没有录入平均时间的学生,确保只从有有效数据的记录里筛选。
  2. 修正SELECT字段:把averageTime IS NOT NULL改成averageTime,这样你拿到的是真实的平均时间值,而不是布尔判断结果。
  3. 排序逻辑:因为要找最快的(时间最短),所以用ORDER BY averageTime(默认升序,数值小的在前),如果要最慢的则用ORDER BY averageTime DESC。
  4. 修复缩进:把print语句缩进进循环内,这样每一条查询到的记录都会被打印出来,而不是只打印最后一条。

内容的提问来源于stack exchange,提问作者Lily Crawford

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.26 22:27:34