【问题标题】:SQLite View utilising calculation that ignores data valuesSQLite View 利用忽略数据值的计算
【发布时间】:2014-05-01 16:06:09
【问题描述】:

大家下午好,

利用下面的代码,我创建了一个视图,用于计算每英里的平均时间。

CREATE VIEW AverageRunTime AS
SELECT UserDetails.username AS username,
CardiovascularRecords.distance_in_miles AS distance,
CardiovascularRecords.start_time AS starttime,
CardiovascularRecords.end_time AS endtime,
sum(strftime('%s', end_time) - strftime('%s', start_time) / distance_in_miles) AS averagespeedpermile
FROM UserDetails INNER JOIN CardiovascularRecords
ON Userdetails.username=CardiovascularRecords.username

我遇到的问题是考虑到距离变量,使用 REAL 数据类型时,我有几个十进制值,例如从 0.1 到 1 的范围。

执行上述求和时,视图将仅显示与整数相关的数据,而完全忽略任何包含十进制值的记录。

非常欢迎对此问题提供任何帮助,与我的架构相关的代码也包含在下面,以允许其他人复制我的工作。

CREATE TABLE "CardiovascularRecords" ("record_ID" INTEGER PRIMARY KEY  AUTOINCREMENT  NOT NULL  UNIQUE CHECK (record_ID>0) , "distance_in_miles" REAL NOT NULL CHECK (distance_in_miles>0) , "username" TEXT NOT NULL , "date" DATETIME DEFAULT CURRENT_DATE, "notes" TEXT(50), "start_time" TEXT, "end_time" TEXT, FOREIGN KEY(distance_in_miles) REFERENCES DistanceinMiles(distance_in_miles) ON DELETE CASCADE ON UPDATE CASCADE,FOREIGN KEY(username) REFERENCES UserDetails(username) ON DELETE CASCADE ON UPDATE CASCADE)

CREATE TABLE "UserDetails" ("username" TEXT PRIMARY KEY  NOT NULL  UNIQUE  CHECK (length(username)>0), "password" TEXT NOT NULL  CHECK (length(password)>3), "email_address" TEXT NOT NULL  UNIQUE CHECK (length(email_address)>3) , "weight_in_pounds" REAL NOT NULL CHECK(weight_in_pounds>0) CHECK (length(weight_in_pounds)>0), "height_in_inches" REAL NOT NULL CHECK(height_in_inches>0) CHECK (length(height_in_inches)>0), "age" INTEGER CHECK(age>0), WITHOUT ROWID)

提前谢谢你。

【问题讨论】:

  • 显示将distance_in_miles写入数据库的代码。
  • CREATE TABLE "DistanceinMiles" ("distance_in_miles" REAL PRIMARY KEY NOT NULL DEFAULT (null) CHECK (distance_in_miles>0),"distance_in_miles_description" TEXT)
  • 我的意思是,显示将distance_in_miles 值写入CardiovascularRecords 表的代码在您的程序中
  • 没有程序,我只是利用数据库本身,使用的程序是用于操作的SQLite管理器
  • SELECT DISTINCT typeof(distance_in_miles) FROM CardiovascularRecords 的输出是什么?

标签: database sqlite view sum derived


【解决方案1】:

SQLite 使用dynamic typing,因此可以将字符串插入distance_in_miles 列。

检查distance_in_miles>0 没有帮助,因为any string compares larger than any number

修复您的程序以将值存储为数字。

【讨论】:

  • 如果我将它们存储为整数,虽然它不是一个准确的系统,但有些人只会跑 0.1 英里等
  • 我还应该注意,视图的结果忽略了记录低于“1”的任何人,任何有小数的人都已从视图中省略
  • 我说的不是“整数”而是“数字”。您的问题是您使用的是字符串。
  • 我被告知 REAL 是显示小数点值的理想选择,这是已被使用的。
  • 不,您正在写入字符串值。
猜你喜欢
  • 2017-12-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-02-28
  • 2021-04-16
  • 2022-01-12
  • 2021-06-30
相关资源
最近更新 更多