循环自行车共享 SQL ORDER BY timestampdiff 显示 NULL

Cyclistic Bike Share SQL ORDER BY timestampdiff shows NULLS

提问人:Kenny Smith 提问时间:3/21/2023 更新时间:3/21/2023 访问量:60

问:

我正在尝试完成有关自行车共享数据的 Google 数据分析认证顶点项目。我从这里下载了 2022 年的月度数据:https://divvy-tripdata.s3.amazonaws.com/index.html

有两个日期时间列,started_at 和 ended_at,包含客户租用和归还自行车的时间。使用这两列和 MySQL,我想获得这两者的差异以获得trip_length列。

使用 DBeaver 和 Visual Studio Code,我能够正确地显示按行程长度降序排序的数据:

SELECT 
    started_at,
    ended_at,
    TIMESTAMPDIFF(MINUTE, started_at, ended_at) AS trip_length
FROM 
    bikes.processed
ORDER BY 
3 DESC
LIMIT 1000;

但是,每次我想翻转结果的顺序(按升序)时,DBeaver 和 Visual Studio Code 都会将所有数据显示为 NULL。我浏览了数据清理过程,并确保完全删除所有包含 null 变量的元组。

我找到了一个解决方法,即在这里使用顶级答案:MySQL Orderby a number, Nulls last

SELECT 
    started_at,
    ended_at,
    TIMESTAMPDIFF(MINUTE, started_at, ended_at) AS trip_length
FROM 
    bikes.processed
ORDER BY ISNULL(trip_length), trip_length ASC
LIMIT 10;

我对两个系统都显示空值和我不得不将空值结果推到最后感到有点不安。为什么会这样?如果出现一些随机空值,我可以相信我的分析吗?非常感谢!

以下答案显示所有空答案:

SELECT 
    started_at,
    ended_at,
    TIMESTAMPDIFF(MINUTE, started_at, ended_at) AS trip_length
FROM 
    bikes.processed
ORDER BY 3 ASC
LIMIT 10;
SELECT 
    started_at,
    ended_at,
    TIMESTAMPDIFF(MINUTE, started_at, ended_at) AS trip_length
FROM 
    bikes.processed
ORDER BY ISNULL(trip_length), trip_length ASC
LIMIT 10;

我希望至少找到填充的 started_at 和 ended_at 列,但由于某种原因,两个系统都只显示其中有 NULL 的列。

mysql null sql-order-by dbeaver

评论

0赞 P.Salmon 3/21/2023
您应该在代码中处理 null 和无效日期,因为如果其中任何一个为 true,datediff 将返回 null。
0赞 Kenny Smith 3/22/2023
嗨,P。我认为我在擦除零点方面做得很好,所以我不知道它们来自哪里。这在现实世界中会发生吗?我正在转行,所以我身边有任何人可以和我一起交流想法。即使发生了这个空值问题,也可以继续我的分析吗?有没有办法摆脱这些阴影 NULL 值?

答: 暂无答案