【问题标题】:How to update a set of data with reverse scoring on SQLite?如何在 SQLite 上使用反向评分更新一组数据?
【发布时间】:2019-11-20 05:15:17
【问题描述】:

我有一组收集为 1-4 的数据,但我必须转换得分才能计算组件得分。

通过转换得分,我的意思如下: 如果分数是'1' - 我需要转换成'4' '2' 转换为 '3' '3' 转换为 '2' '4' 转换为 '1'

我曾尝试使用更新查询,但有点搞砸了,因为当某些内容从“4”转换为“1”时,它们最终会在查询结束时转换为“1”。

示例代码:

Update BIS5 Set bis_bar_7 = 4 where bis_bar_7 = 1;
Update BIS5 Set bis_bar_7 = 3 where bis_bar_7 = 2;
Update BIS5 Set bis_bar_7 = 2 where bis_bar_7 = 3;
Update BIS5 Set bis_bar_7 = 1 where bis_bar_7 = 4;

所以在我运行这个之后 - 更新 BIS5 设置 bis_bar_7 = 4 where bis_bar_7 = 1; 将有更多带有“4”的数据,然后在我运行此行时进行转换-更新 BIS5 Set bis_bar_7 = 1 where bis_bar_7 = 4;

那么我应该怎么做而不弄乱其他数据而只纠正原始数据呢?

关于我应该在哪里运行它的任何建议?我拥有的文件是 CSV,然后我转换为 SQLite。

【问题讨论】:

    标签: sql sqlite sql-update


    【解决方案1】:

    您可以使用单个 CASE 表达式进行更新:

    UPDATE BIS5
    SET bis_bar_7 = CASE bis_bar_7 WHEN 4 THEN 1
                                   WHEN 3 THEN 2
                                   WHEN 2 THEN 3
                                   WHEN 1 THEN 4 END
    WHERE
        bis_bar_7 IN (1, 2, 3, 4);
    

    【讨论】:

    • 有效!谢谢您的帮助。你认为我可以在 Python 中使用 Panda 做到这一点吗?因为我的文件是 CSV 格式的。
    • Pandas 是一种与 SQLite 完全不同的语言/框架。您提出了一个 SQL 问题,该问题已得到解答。
    【解决方案2】:

    不用CASE也可以:

    UPDATE BIS5 
    SET bis_bar_7 = 5 - bis_bar_7 
    WHERE bis_bar_7 IN (1, 2, 3, 4);
    

    通过从 5 中减去 bis_bar_7 的当前值,您可以得到想要保存的值。

    【讨论】:

      猜你喜欢
      • 2015-07-13
      • 1970-01-01
      • 2015-10-01
      • 2022-07-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多