【发布时间】:2018-05-03 19:02:35
【问题描述】:
我有一个名为“dbTable”的数据库表,其中包含 7 列:name、score1、score2、score3、score4、score5、2nd_lowest。 每个学生都有一个记录,所有分数列都已填满。
eg//
If james had 'score1' = 40, 'score2' = 70, 'score3' = 36, 'score4' = 60, 'score5' = 50.
我如何编写一个 sql 查询来选择 40 作为第二小的得分值并将其更新到第二低的列。
以便剩余的记录可以填写“2nd_lowest”,如下所示:
|姓名 |得分1 |分数2 |分数3 |分数4 |分数5 | 2nd_lowest |
-------------------------------------------------- ----------------------------------
|吉米 | 40.0 | 70.0 | 36.0 | 60.0 | 50.0 | 40.0 |
|凯恩 | 20.0 | 90.0 | 72.0 | 10.0 | 30.0 | 20.0 |
|咪咪| 50.0 | 80.0 | 76.0 | 30.0 | 50.0 | 50.0 |
我正在使用 sqlite3 dbms
所有帮助将不胜感激。谢谢
【问题讨论】:
-
所以要理解这个问题,您是说要显示所有学生的分数,但他们的分数总是按从左到右的顺序排列,比如说?还是只针对那个学生?
-
所有学生@Toby.. 每个学生都有每个“分数列”的分数记录。所以我想要一个查询,该查询只能选择所有分数列中的第二低分数并将值返回到该学生的“2nd_lowest”列中。这应该发生在所有学生身上。
-
这似乎不是一个好的设计,要实现它你需要一个触发器。但由于您需要的数据是衍生数据,因此您实际上不必存储它
-
我同意您的方法似乎有缺陷,以后可能会造成更多麻烦。我不明白为什么你会在每行中存储两次相同的值,只是为了显示第二低的值?为什么不直接查询数据库并查找第二低的呢?但是,要回答实际问题,您可以通过触发器来完成,正如 anchreg 所说。或者您可以尝试 CASE 语句,或者其他方法。用代码比用 SQL 更容易。试试看这里stackoverflow.com/questions/368351/… 可以吗?
-
select min(score1,score2,score3,score4,score5) 能够在所有五列中找到学生的最低值,并对表中的所有学生做同样的事情......我只是希望有办法找到第二低的@anchreg